首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组中的$lookup在$lookup中的对象数组

数组中的$lookup在$lookup中的对象数组
EN

Stack Overflow用户
提问于 2021-10-31 11:18:52
回答 1查看 35关注 0票数 0

我是mongoDB的新手。也许这是个简单的问题。请帮我这个忙。

在已填充的值中填充的mongo查询是什么?

有3个表用户,bookHistory和书籍。我需要全部查一查。

这就是我需要的结构。

代码语言:javascript
复制
"userList": [
  {
    "_id": "NT-723DD65BE100-444B-B441-2B2804ED7348",
    "name": "AMC",
    "uid": "NT-723DD65BE100-444B-B441-2B2804ED7348",
    "bookHistory": [
      {
        "_id": "SHNH-06E723698ED8-420F-AB6D-6574633F5984",
        "bookStocksId": "SHNC-4559F09A7F4B-4508-9F61-2A2CD248D3F9",
        "bookId": "SHN-E3AE0DB3BC7D-4214-BDAE-59140DA1F850",
        "uid": "NT-723DD65BE100-444B-B441-2B2804ED7348",
        "bookDetails": {
          "_id": "SHN-E3AE0DB3BC7D-4214-BDAE-59140DA1F850",
          "nameOfBook": "test",
          "nameOfAuthor": "test authou",
        }
      },
      {
        "_id": "617e6c068bf26821f955b034",
        "bookStocksId": "SHNC-694DF63AE953-40A8-B49B-71E46D0A9463",
        "bookId": "SHN-5B5A2712CE88-46BF-8A5F-F01174316025",
        "uid": "NT-723DD65BE100-444B-B441-2B2804ED7348",
        "bookDetails": {
          "_id": "SHN-5B5A2712CE88-46BF-8A5F-F01174316025",
          "nameOfBook": "test",
          "nameOfAuthor": "test authou",
        }
      }
    ]
  }
]
  • 从“用户”表需要使用uid填充"bookHistory“表
  • 从bookHistory表需要使用bookId填充“book”表

有可能吗?我在尝试这段代码

代码语言:javascript
复制
const pipeline = [
  { $match: query },
  { $project: projection },
  {
    $lookup: {
      from: 'bookHistory',
      localField: 'uid',
      foreignField: 'uid',
      as: 'bookHistory',
    }
  },
];

下面是3个表的示例数据

  1. 用户表

{ "_id“:”NT-723DD65BE100-444b-B 441-2B2804ED7348“,”名称“:"AMC","uid”:“NT-723DD65BE100-444b-B 441-2B2804ED7348”,"updatedBy“:"NT-723DD65BE100-444B-B441-2B2804ED7348","updatedOn”:ISODate("2021-10-22T02:45:31.320+0000"),}

  1. bookHistory

{ "_id“:"SHNH-F10ED64A7F98-480B-8D8F-B7587594FB10","bookStocksId”:"SHNC-7D60FF3D3E15-4C43-AB24-7E3EA1C0D79A","bookId“:"SHN-E3AE0DB3BC7D-4214-BDAE-59140DA1F850","uid”:“NT-72365BE100-444b-444b-B441-2B28047348”,"tookOn“:ISODate(”2021-10-31T12:59:24.895+dueOn“),dueOn:”ISODate“(”ISODate“:”ISODate“(”ISODate-11:2012:20T0000“)。"addedOn“:ISODate("2021-10-31T12:59:24.895+0000") }

  1. 图书桌

{ "_id“:"SHN-E3AE0DB3BC7D-4214-BDAE-59140DA1F850","nameOfBook”:“测试”,"nameOfAuthor“:”测试作者“,"yearOfPublication”:“1998年”,“出版”:“测试”,"addedOn“:ISODate("2021-10-27T08:39:00.147+0000") }

有人能帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-01 04:05:17

只需在从$lookupbookHistory$lookup子管道中执行从bookHistorybooks的另一个user

代码语言:javascript
复制
db.user.aggregate([
  {
    "$lookup": {
      "from": "bookHistory",
      let: {
        uid: "$uid"
      },
      pipeline: [
        {
          $match: {
            $expr: {
              $eq: [
                "$$uid",
                "$uid"
              ]
            }
          }
        },
        {
          "$lookup": {
            "from": "books",
            "localField": "bookId",
            "foreignField": "_id",
            "as": "bookDetails"
          }
        },
        {
          "$unwind": "$bookDetails"
        }
      ],
      "as": "bookHistory"
    }
  }
])

这是供您参考的蒙戈游乐场

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69786373

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档