det finns inget sätt att få åtkomst till objektreferensdata under den aggregerade processen, det arbete jag använde för mitt projekt var att lägga till en referens till ägaren i schemana i fråga.
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,
});
Och sedan anställd för att samla direkt på underdokumentet för att få de unika användarna som äger instanserna av plats, på så sätt kan jag få ett ropresultat som matchar en fråga och en plats.
Exempel:
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);
});
});
}
det här är precis så jag hittade för att möta mina specifika behov, jag hoppas att det kan hjälpa någon.