今天我遇到了问题。我正在使用express,mongodb和mongoose来处理我的应用程序的后端。
我得到了一个带有父对象ObjectId引用的模型。我想检索包含此父级的每个文档。但我只收到父母的名字,而不是id。
我找到的唯一解决方案是首先查询id然后再查找我的文档。我想知道在一个查询中是否可以这样做?
我的模特:
const childSchema = new Schema({
name: {
type: String,
required: true
},
_exampleParent: {
type: Schema.Types.ObjectId, ref: 'parents',
}
});
我的查询:
Parent.findOne({name:req.query.parent}, function(err, values){
if(err) return next(err);
Child.find({_exampleParent:values.id},
'name',
function(err, values){
if(err) return next(err);
res.send(values);
}
);
});
谢谢你们!
答案 0 :(得分:0)
你可以填充"孩子"然后用父母的名字过滤。
答案 1 :(得分:0)
你可以通过改变架构来做到这一点:
Pass Reference Of Child To Parent Instead of parent reference to the child.
Below I am just showing an example of how to do this, do consider your variable names as mine can differ:
var parentSchema = new Schema({name:{
type:'string'
},
children:[{type:Schema.Types.ObjectId,
ref:"child"}]
});
var childSchema = new Schema({name:{type:'string'}});?
var child = mongoose.model('child',childSchema);
var parent = mongoose.model('parent',parentSchema);
现在要检索:
parent.findOne({name:req.query.name}).populate('child').then((result)=>{
console.log(result.children) //will be an array of all the children having the same parent.
})