er is geen manier om toegang te krijgen tot object waarnaar verwezen wordt tijdens het geaggregeerde proces, het werk dat ik voor mijn project heb gedaan, was om een verwijzing naar de eigenaar toe te voegen in de schema's in kwestie.
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,
});
En vervolgens gebruikt om rechtstreeks op het subdocument te aggregeren om de unieke gebruikers te verkrijgen die eigenaar zijn van de instanties van plaats, op deze manier kan ik een shout-resultaat verkrijgen dat overeenkomt met een zoekopdracht en een plaats.
Voorbeeld:
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);
});
});
}
dit is precies de manier waarop ik heb gevonden om aan mijn specifieke behoeften te voldoen, ik hoop dat het iemand kan helpen.