首页 > 解决方案 > 查询文档数组中引用的文档

问题描述

我有两个集合成员和书籍,其中一本书在成员集合中被引用到一组文档中,如下所示:

会员文件

{
    name:"Michael Mason",
    phone: "0754512542",
    state: true,
    penalties: 12.5,
    activeBorrows: [
      {
        id_book: 10,
        borrowDate: new Date(2021, 5, 15),
        returnDate: new Date(2021, 6, 15),
      },
      {
        id_book: 4,
        borrowDate: new Date(2021, 5, 15),
        returnDate: new Date(2021, 6, 30),
      },
    ],
  },

图书文件

 {
    _id: 10,
    title: "C++ Programming Language",
    isbn: "9780321563842",
    authors: [
      {
        lastname: "Stroustrup",
        firstname: "Bjarne ",
        born: new Date(1973, 12, 26),
      },
    ],
    categories: ["software", "programare"],
    published: 2013,
    nrPages: 1368,
  },

我想为会员提取他借阅的书籍的详细信息,例如名为“Michael Mason”的会员,以从图书收藏中打印 ID 为 10 和 4 的书籍的详细信息。这是我尝试过的,但它在“$in”命令中打印错误:

var member = db.members.find({"name":"Michael Mason"},{"activeBorrows":1},{$unwind:"$activeBorrows"})
var book = db.books.find({"_id":{"$in":member["activeBorrows"]}})
print(book);

我正在考虑这种方式或使用聚合,但我不知道该怎么做..

标签: mongodb

解决方案


您必须使用聚合

  • $match获取特定文件
  • $lookup加入收藏

这是代码

db.Member.aggregate([
  { "$match": { name: "Michael Mason" } },
  {
    "$lookup": {
      "from": "Book",
      "localField": "activeBorrows.id_book",
      "foreignField": "_id",
      "as": "joinBooks"
    }
  }
])

工作Mongo游乐场

注意:名称不是唯一的,所以最好有任何唯一的 id


推荐阅读