tidak ada cara untuk mengakses objek Data yang direferensikan selama Proses agregat, pekerjaan yang saya lakukan untuk proyek saya adalah menambahkan referensi ke pemilik dalam skema yang dimaksud.
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,
});
Dan kemudian digunakan untuk Agregat langsung pada subdokumen untuk mendapatkan pengguna unik yang memiliki instance tempat, dengan cara ini saya bisa mendapatkan hasil teriakan yang cocok dengan kueri dan tempat.
Contoh:
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);
});
});
}
ini adalah cara yang saya temukan untuk mengatasi kebutuhan khusus saya, saya harap ini dapat membantu seseorang.