请问mongodb怎么联合查询联合表的数据并组合?

发布于 2022-09-12 22:48:37 字数 720 浏览 12 评论 0

如下我有两张表,分别是项目和标签,我想查询每个标签所关联的项目,请问有办法使用一条query查询出结果么?谢谢!

项目表

{ tags: [A, B], name: '项目1' }
{ tags: [B, C], name: '项目2' }
{ tags: [A, C], name: '项目3' }
{ tags: [A, B, C], name: '项目4' }

tags表

{ name: 'A', desc: '...' }
{ name: 'B', desc: '...' }
{ name: 'C', desc: '...' }

查询结果

{
    name: 'A',
    projects: [
        { name: '项目1' },
        { name: '项目3' },
        { name: '项目4' },
    ]
},
{
    name: 'B',
    projects: [
        { name: '项目1' },
        { name: '项目2' },
        { name: '项目3' },
    ]
},
{
    name: 'C',
    projects: [
        { name: '项目2' },
        { name: '项目3' },
        { name: '项目4' },
    ]
},

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月寒剑心 2022-09-19 22:48:38
  • 需要原生支持的话试试用mongodb中的lookup聚合,只需要给mongodb发一条查询指令。
  • 如果用了mongoose之类的第三方包,通过正确的配置也可以做到在代码层面查询一次,但底层其实给mongodb发了多条查询指令,然后第三方包再帮你组装返回数据
薄荷梦 2022-09-19 22:48:37

查询方式为:

db.getCollection('tags').aggregate(
  [
    {
      $lookup: {
        from: 'projects',
        as: 'projects',
        let: { projectId: '$_id' },
        pipeline: [
          {
            $match: {
              $expr: {
                $in: ['$projectId', '$tags']
              }
            }
          }
        ]
      }
    }
  ]
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文