如何查询子模型在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 });
奇妙的事情发生在populate
的match
选项中,它指向要填充的嵌套文档的属性。
另请检查我原来的post
编辑:我是作者混淆书籍,现在它被纠正
- 将sorting添加到mongoose查找查询
- var / log / mongodb / mongod.log从node.js打开和closures连接的无限循环
- 如何从node.js以编程方式执行mongodump命令?
- 将multer文件(nodejs)上传到Mongo数据库
- 500错误:对于使用ResourceJS的Mongoose模型,对于path\“_ id \”中的值转换为ObjectId失败
- 将客户端JS连接到服务器端的NodeJS应用程序
- 无法从Mongoose访问populate()的d对象的属性?
- 如何在不replace现有字段的情况下更新MongoDB中的logging?
- 在mongodb中保存聊天消息的最佳方法是什么?