Mongoose填充和按引用数组搜索

时间:2016-02-18 20:24:33

标签: node.js mongodb mongoose mongodb-query mongoose-populate

我正试图围绕Mongoose Populate语法和结构。我有两个模式。 包含引用数组。

const Parent = new Schema({
  name: String,
  children: [{type: Schema.ObjectId, ref: 'Child'}]
});

const Child = new Schema({
  name: String
});

要填充,我一直在这样做:

Parent
  .findById(parent.id)
  .populate('children')
    .exec( (err, parent) => {
      parent.children = arrayOfInsertedChildDocs;
      parent.save();
    });

家长引用保存,但有没有办法查询引用某个孩子父母?例如,所有在子数组中引用ID为 ObjectId('xxxxxxxxx')的孩子的父母?

这是我一直在尝试的但是它没有用。

let query = { "children._id": mongoose.Types.ObjectId(childId) };

Parent.find(query, (err, parents) => {
   //process parents 
}) 

这可能吗?

2 个答案:

答案 0 :(得分:0)

您想在MongoDB数组中搜索元素。假设你有一份文件。

{
  name :"harry",
  childen:["10ahhdj20","9ajskjakj9","8aiisu38","2jjaksjah0"]
}

因此,要在数组列表中搜索,可以使用它。

db.parents.find( { tags: { $all: [ "10ahhdj20", "812922dd" ] } } )

你会得到所有有这些孩子的父母。

答案 1 :(得分:0)

想出来。从嵌套数组中的子ID获取 Parent 的查询是:

Parent
  .find({"children":ObjectId(child.id)})
  .populate("children")
  .exec((err,parents) => {
    //process parents
  });