sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Mongoose/mongodb tiene acceso a las referencias de objetos en el esquema durante la agregación?

no hay forma de acceder a los datos de referencia del objeto durante el proceso agregado, el trabajo que empleé para mi proyecto fue agregar una referencia al propietario en los esquemas en cuestión.

User = new Schema({
    places:[{type: Schema.Types.ObjectId, ref:'Place'}],
    shouts:[{type: Schema.Types.ObjectId, ref:'Shout'}]
});
Place = new Schema({
    owner:{type: Schema.Types.ObjectId, ref:'Place'},
    name:String,
    description:String,
});
Shout = new Schema({
    owner:{type: Schema.Types.ObjectId, ref:'Place'},
    content:String,
});

Y luego empleé para agregar directamente en el subdocumento para obtener los usuarios únicos que poseen las instancias de un lugar, de esta manera puedo obtener un resultado de llamada que coincida con una consulta y un lugar.

Ejemplo:

module.exports.askForShoutInPlace = function(req, res){
var pname = new RegExp(req.params.pname, 'i'); 
var stringQ = new RegExp(req.paramos.qcontent, 'i');
Place.aggregate(
    [
       //find Places that match criteria
       {'$match':{'name':pname}},
       //select owner id object to result
       {'$project':{ owner:'$owner'}},
       //group those results to single array with unique ids of users
       {'$group':{_id:'$owner'}}
    ]).exec(function(err, results){
    //find user shouts that match string and belong to owners know to be owners of a place
    Shout.find({'content':stringQ}).where({'owner':{'$in':results}}).exec(function(err, shouts){
       res.send(shouts);
    });
});

}

esta es la forma que encontré para solucionar mis necesidades particulares, espero que pueda ayudar a alguien.