在 MongoDB 查询
IN MongoDB Query
假设我有两个集合:一个包含作者和他们的书籍数组,另一个包含订单和书籍数组:
作者:
{
"_id" : 1,
"name" : "Jane Austen"
"books" : [ { "book_name": "Pride and prejudice", "pages": 325 }, { "book_name": "Persuassion", "pages": 355 } ];
},
{
"_id" : 2,
"name" : "Mark Twain"
"books" : [ { "book_name": "Tom Swayer", "pages": 500 } ];
}
订单:
{
"_id" : Order_ID,
"total : 500
"books" : [ { "book_name": "Pride and prejudice", "pages": 325 } ];
}
如何打印哪些订单包含来自“简·奥斯汀”的书籍?
我尝试执行以下操作:
var austen = db.authors.find({name: "Jane Austen"}, {books: 1, _id: 0});
他将印刷简·奥斯丁作为作者的所有书籍。
然后我尝试这样做:
db.order.find( { books{ $in: [austen] } }, { _id: 0 } )
但是它似乎没有给我任何结果,我不确定为什么
你的方法很好,只是类型不匹配。
var austen = db.authors.find({name: "Jane Austen"}, {books: 1, _id: 0});
此时 austen
是一个游标(或一个对象数组,具体取决于您执行此操作的位置),我建议您改用 findOne
。
var austen = db.authors.findOne({name: "Jane Austen"}, {books: 1, _id: 0});
现在 austen
是:
{
"name" : "Jane Austen"
"books" : [ { "book_name": "Pride and prejudice", "pages": 325 }, { "book_name": "Persuassion", "pages": 355 } ];
}
所以现在你可以做:
db.order.find( { books: { $in: austen.books } }, { _id: 0 } ).toArray();
假设我有两个集合:一个包含作者和他们的书籍数组,另一个包含订单和书籍数组:
作者:
{
"_id" : 1,
"name" : "Jane Austen"
"books" : [ { "book_name": "Pride and prejudice", "pages": 325 }, { "book_name": "Persuassion", "pages": 355 } ];
},
{
"_id" : 2,
"name" : "Mark Twain"
"books" : [ { "book_name": "Tom Swayer", "pages": 500 } ];
}
订单:
{
"_id" : Order_ID,
"total : 500
"books" : [ { "book_name": "Pride and prejudice", "pages": 325 } ];
}
如何打印哪些订单包含来自“简·奥斯汀”的书籍?
我尝试执行以下操作:
var austen = db.authors.find({name: "Jane Austen"}, {books: 1, _id: 0});
他将印刷简·奥斯丁作为作者的所有书籍。
然后我尝试这样做:
db.order.find( { books{ $in: [austen] } }, { _id: 0 } )
但是它似乎没有给我任何结果,我不确定为什么
你的方法很好,只是类型不匹配。
var austen = db.authors.find({name: "Jane Austen"}, {books: 1, _id: 0});
此时 austen
是一个游标(或一个对象数组,具体取决于您执行此操作的位置),我建议您改用 findOne
。
var austen = db.authors.findOne({name: "Jane Austen"}, {books: 1, _id: 0});
现在 austen
是:
{
"name" : "Jane Austen"
"books" : [ { "book_name": "Pride and prejudice", "pages": 325 }, { "book_name": "Persuassion", "pages": 355 } ];
}
所以现在你可以做:
db.order.find( { books: { $in: austen.books } }, { _id: 0 } ).toArray();