MongoDB使用aggregate联合查询

一、 lookup的功能及语法
主要功能 是将每个输入待处理的文档,经过$lookup 阶段的处理,输出的新文档中会包含一个新生成的数组列(户名可根据需要命名新key的名字 )。数组列存放的数据 是 来自 被Join 集合的适配文档,如果没有,集合为空(即 为[ ])
1、基本语法
from需要join的表, localField相当于主表的键,foreignFiel相当于join的键

db.getCollection.aggregate{
   $lookup:
     {
       from: <collection to join>,#关联的表
       localField: <field from the input documents>,#主表字段
       foreignField: <field from the documents of the "from" collection>,#join的表字段
       as: <output array field>#重命名
     }
}

表一

db.cs.insert([{
    "crumb_s": "摄像机",
    "crumb_url": "cat=670,716,726",
},
{
    "crumb_s": "投影机",
    "crumb_url": "cat=670,716,728",
},
{
    "crumb_s": "照相机",
    "crumb_url": "cat=670,716,729",
}
])

表二

db.cs.insert([{
    "crumb_s": "摄像机",
    "crumb_url": "cat=670,716,726",
},
{
    "crumb_s": "投影机",
    "crumb_url": "cat=670,716,728",
},
{
    "crumb_s": "照相机",
    "crumb_url": "cat=670,716,729",
}
])

表二:

db.sc.insert([{
    "crumb_s": "摄像机",
     "data_time": "2020/08/03",
},
{
    "crumb_s": "投影机",
    "data_time": "2020/08/07",
},
{
    "crumb_s": "照相机",
    "data_time": "2020/08/04",
}
])

查询

db.cs.aggregate({
	"$lookup":{
         "from": "sc",#次表
         "localField": "crumb_s",#主表的
         "foreignField": "crumb_s", #次表的
         "as": "inventory_docs"
       }

})

由于MongoDB的键不唯一多以join查询出来的数据是一个list
查询结果:

// 1
{
    "_id": ObjectId("5f28fe08e43a000024000eb5"),
    "crumb_s": "投影机",
    "crumb_url": "cat=670,716,72",
    "inventory_docs": [
        {
            "_id": ObjectId("5f28fec5e43a000024000eba"),
            "crumb_s": "投影机",
            "data_time": "2020/08/07"
        }
    ]
}

// 2
{
    "_id": ObjectId("5f28fe54e43a000024000eb6"),
    "crumb_s": "摄像机",
    "crumb_url": "cat=670,716,726",
    "inventory_docs": [
        {
            "_id": ObjectId("5f28fec5e43a000024000eb9"),
            "crumb_s": "摄像机",
            "data_time": "2020/08/03"
        }
    ]
}

// 3
{
    "_id": ObjectId("5f28fe54e43a000024000eb7"),
    "crumb_s": "投影机",
    "crumb_url": "cat=670,716,728",
    "inventory_docs": [
        {
            "_id": ObjectId("5f28fec5e43a000024000eba"),
            "crumb_s": "投影机",
            "data_time": "2020/08/07"
        }
    ]
}

// 4
{
    "_id": ObjectId("5f28fe54e43a000024000eb8"),
    "crumb_s": "照相机",
    "crumb_url": "cat=670,716,729",
    "inventory_docs": [
        {
            "_id": ObjectId("5f28fec5e43a000024000ebb"),
            "crumb_s": "照相机",
            "data_time": "2020/08/04"
        }
    ]
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值