nie ma możliwości uzyskania dostępu do danych, do których odwołuje się obiekt, podczas procesu agregacji, praca, którą zastosowałem w moim projekcie, polegała na dodaniu odniesienia do właściciela w danych schematach.
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,
});
A następnie wykorzystany do Agregacji bezpośrednio na poddokumencie, aby uzyskać unikalnych użytkowników, którzy są właścicielami instancji miejsca, w ten sposób mogę uzyskać wynik krzyku pasujący do zapytania i miejsca.
Przykład:
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);
});
});
}
to jest właśnie sposób, w jaki znalazłem rozwiązanie moich szczególnych potrzeb, mam nadzieję, że może to komuś pomóc.