通过Aggregate $lookup操作 进行MongoDB的联表查询

Aggregate的 $lookup$match ,可用于MangoDB的联表

直接上代码

两个表介绍

  1. services表
    number: 服务号码
    flow: 流程名称
  2. flows表
    name: 流程名称
    config: 流程配置

services表 和 flows 表,通过flow和name关联。

联表查询

想实现查询services表时,关联查询出引用的flow的详细配置,方便前台展示
用的aggrgete的Pipeline参数如下

[
  {
    '$lookup': {
      'from': 'flows', 
      'localField': 'flow', 
      'foreignField': 'name', 
      'as': 'flow_detail'
    }
  }
]

带上过滤

想实现查询services表的指定service,关联查询出引用的flow的详细配置,方便前台展示
用的aggrgete的Pipeline参数如下

[
   {
    '$lookup': {
      'from': 'flows', 
      'localField': 'flow', 
      'foreignField': 'name', 
      'as': 'flow_content'
    }
  }, {
    '$match': {
      'number': '6666'
    }
  }
]

基于egg-mongo-native编码

最后基于上述pipeline参数实现编码如下

let args = {
  pipeline: [
    {
      '$lookup': {
        'from': 'flows', 
        'localField': 'flow', 
        'foreignField': 'name', 
        'as': 'flow_content'
      }
    }, {
      '$match': {
        'number': '6666'
      }
    }
  ]
}
const result = await this.app.mongo.get('database').aggregate('services', args)
console.log(result)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 国家电网公司企业标准(Q/GDW)- 面向对象的用电信息数据交换协议 - 报批稿:20170802 前言: 排版 ...
    庭说阅读 11,297评论 6 13
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵胜奥阅读 4,930评论 0 1
  • 第四版的第八章内容与第三版基本一致。 本章内容: 创建会话式web应用程序 定义流程状态和行为 保护web流程 互...
    hoxis阅读 7,272评论 2 20
  • 夜微凉 迎着窗 月儿弯弯微风轻扬 如钩的新月勾起无限怅惘 轻轻的微风吹皱心头的荡漾 时光的那头 谁在抬头眺望 满天...
    须臾D阅读 185评论 0 0
  • 这是一个平凡的故事,因为故事的主角叫梦凡。故事发生于南方一个小乡村—唐村,一个很普通的名字,这里四面环山,家家以务...
    篱熵阅读 318评论 0 0