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

我不知道如何甚至说这个问题…但这是一个尝试。 我将这本书称为“父母”模型,并将作者称为“孩子”模型。

我有两个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。

我可以想办法用多个查询做到这一点,但我想知道是否有办法用一个查询来做到这一点。

您可以按照文档中的说明使用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. }); 

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

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

奇妙的事情发生在populatematch选项中,它指向要填充的嵌套文档的属性。

另请检查我原来的post

编辑:我是作者混淆书籍,现在它被纠正