Mongodb顺序模式查询



我有一个受害者模式:

let Victim= new Schema({
name: {type: String},
gender: {type: String},
Id: {type: String},
address: {type: String},    
});

a罪犯模式:

let Culprit= new Schema({
name: {type: String},
gender: {type: String},
cellphone: {type: String},
address: {type: String},    
});

和一个案例模式:

let Case= new Schema({
victims:[String],//this contains array of victims _id's
culprits:[String],//this contains array of culprit _id's
aboutCase:{type:String},
caseType:{type:String}, 
date:{type:String}
})

请注意,Case模式的受害者字段包含受害者的_id,而罪犯字段包含罪犯的_id。这两个字段都是数组。

现在,如果我这样做:

Case.find(function(err, allTheCases) {
if (err) {
console.log(err);
} else {
res.json(allTheCases);
//Question : How to get victims and culprits data as complete objects instead of just array of _id's
}
});

结果,allTheCases是所有Case对象的数组,其中每个对象都包含受害者字段。此受害者字段包含受害者_id的数组。

我的问题是:正确的查询语法是什么,这样最终结果(allTheCases(将具有受害者和罪犯对象的完整数组,而不仅仅是受害者和罪犯的_id数组?

您要查找的是mongodb聚合管道中的$lookup

{
$lookup:
{
from: <collection to join>,
localField: <field from the input documents>,
foreignField: <field from the documents of the "from" collection>,
as: <output array field>
}
}

或者,如果你使用Mongoose ODM,你可以用相应的方法填充必要的字段:

let Case= new Schema({
victims:[{ type: Schema.Types.ObjectId, ref: 'Victim' }],
culprits:[{ type: Schema.Types.ObjectId, ref: 'Culprits'}],
aboutCase:{type:String},
caseType:{type:String}, 
date:{type:String}})

查询时:

Case.find().
populate('victims').
populate('culprits').
exec(function (err, cases) {
});

相关内容

  • 没有找到相关文章

最新更新