我不确定如何甚至说出这个问题...但这是一个尝试。我将本书称为“父”模型,将作者称为“儿童”模型。
我有两个猫鼬模特---作者和书籍:
var Author = mongoose.model("Author", {
name: String
});
var Book = mongoose.model("Book", {
title: String,
inPrint: Boolean,
authors: [ { type: mongoose.Schema.ObjectId, ref: "Author"} ]
});
我正在尝试运行一个查询,该查询将返回所有具有inPrint书籍(父模型)的作者(子模型)。
我可以想办法用多个查询来完成它,但我想知道是否有办法用一个查询来完成它。
答案 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}}选项中,它指的是要填充的嵌套文档的属性。