如何在Mongoose中查询基于父模型限制结果的子模型

时间:2015-02-17 22:43:39

标签: node.js mongodb mongoose

我不确定如何甚至说出这个问题...但这是一个尝试。我将本书称为“父”模型,将作者称为“儿童”模型。

我有两个猫鼬模特---作者和书籍:

var Author = mongoose.model("Author", {
  name: String
});

var Book = mongoose.model("Book", {
  title: String,
  inPrint: Boolean,
  authors: [ { type: mongoose.Schema.ObjectId, ref: "Author"} ]
});

我正在尝试运行一个查询,该查询将返回所有具有inPrint书籍(父模型)的作者(子模型)。

我可以想办法用多个查询来完成它,但我想知道是否有办法用一个查询来完成它。

2 个答案:

答案 0 :(得分:1)

您可以使用docs

中所述的populate
  

MongoDB中没有连接,但有时我们仍然希望引用其他集合中的文档。这就是人口流入的地方。详细了解如何在查询结果中包含其他集合中的文档。

在您的情况下,它会像 一样:

Book.find().populate('authors')
.where('inPrint').equals(true)
.select('authors')
.exec(function(books) {
  // Now you should have an array of books containing authors, which can be
  // mapped to a single array.
});

答案 1 :(得分:0)

我今天偶然发现了这个问题并解决了它:

Author.find()
    .populate({ path: 'books', match: { inPrint: true } })
    .exec(function (err, results) {
        console.log(results); // Should do the trick
    });

魔术发生在match的{​​{1}}选项中,它指的是要填充的嵌套文档的属性。

另外check my original post

编辑:我对作者的书籍感到困惑,现在已经纠正了