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

鸿则
  • 2.3k

如下我有两张表,分别是项目和标签,我想查询每个标签所关联的项目,请问有办法使用一条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' },
    ]
},
回复
阅读 878
2 个回答
✓ 已被采纳

查询方式为:

db.getCollection('tags').aggregate(
  [
    {
      $lookup: {
        from: 'projects',
        as: 'projects',
        let: { projectId: '$_id' },
        pipeline: [
          {
            $match: {
              $expr: {
                $in: ['$$projectId', '$tags']
              }
            }
          }
        ]
      }
    }
  ]
)
  • 需要原生支持的话试试用mongodb中的lookup聚合,只需要给mongodb发一条查询指令。
  • 如果用了mongoose之类的第三方包,通过正确的配置也可以做到在代码层面查询一次,但底层其实给mongodb发了多条查询指令,然后第三方包再帮你组装返回数据
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏