查询每个孩子一个参考的一个查询

时间:2017-11-06 15:58:21

标签: javascript node.js mongodb express mongoose

今天我遇到了问题。我正在使用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);
       }
    );
});

谢谢你们!

2 个答案:

答案 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.
})