在 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();