mongo联表聚合查询

本文介绍了一位MongoDB新手如何应对业务需求,通过联表聚合查询来筛选并统计特定条件的数据。举例中,涉及将主集合A与集合B进行关联,并基于状态条件进行过滤,最终计算状态为1的售卖总量。这类似于SQL的某些操作,如$unwind用于数组展开。
摘要由CSDN通过智能技术生成

 

 

 

mongo小白一枚,最近公司业务需求,需要将两个表进行关联后,再进行条件过滤,后进行聚合统计

下面以【主集合A】,联表【集合B】进行举例说明当时做的想法

先简单给一下【主集合A】【主集合B】的结构

集合A,结构如下:

{
	"_id": "123456",
	"aName": '测试',
	'status': '1'
}


集合B,结构如下:

{
	"_id": "abcd",
	"aId": "123456",
	"orders": [{
		"_id": "order123",
		"quantity": "123",
		"saleStatus": "1"
	},
	{
		"_id": "order456",
		"quantity": "456",
		"saleStatus": "0"
	},{
		"_id": "order789",
		"quantity": "100",
		"saleStatus": "1"
	}]
}

需求:求集合A状态为1(a.statue = 1)并且售卖状态为1(b.orders.saleStatus=1)的售卖总量(sum(b.orders.quantity))

db.b.aggregate( [

   {
     $lookup: {
        from: "a",
        localField: "aId",
        foreignField: "_id",
        as: "aInfo"
      }
     
    },{
     $unwind: { path: "$aInfo" }
   },{
     $match: {'aInfo.status':1}
   },
   {
     $unwind: { path: "$orders" }
   },
   {
     $match: {"orders.saleStatus":'1'}  
   },{
     $group:
       {
         _id: "$_id",
         count: { $sum: "$orders.quantity" }
       }
   }
] )

相当于SQL

select sum(b.orders.quantity) from b inner join a on (a._id = b.aId) where a.status='1' and b.orders.saleStatus = '1' group by b._id

$unwind:将数组打散,类似于Java的flatMap,将数组转成多个平级对象

 
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值