Mongoose 按引用数组填充和搜索

Mongoose Populate and Search by Array of References

我正在努力思考 Mongoose Populate 语法和结构。我有两个模式。 Parent 有一个 Child 引用数组。

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

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

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

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

Parent 引用保存了,但是有没有办法查询 Parents 引用了某个 Child?例如,所有在其子数组中引用 ID 为 ObjectId('xxxxxxxxx') 的子对象的父对象?

这是我一直在尝试的方法,但没有用。

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

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

这可能吗?

您想在 MongoDB 数组集中搜索元素。假设你有一个文档。

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

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

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

您将得到所有 parents 拥有这些 children 的人。

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

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