【发布时间】:2019-05-21 14:06:41
【问题描述】:
我有收集torder(销售、客户、小计和发票的集合)和tsales(销售信息的集合,它有1个或多个联系人),然后我想检查每个客户在当前期间的总订单数,这是我放 $unwind 之前的代码:
db.torder.aggregate([
{$match:{$and:[{TANGGALPI:{$gte:'2019-01-01'}},{TANGGALPI:{$lte:'2019-12-31'}}]}},
{$lookup:{
from:"tsales",
localField:"IDSALES",
foreignField:"SALESCODE",
as:"SALESINFO"
}},
{$group:{
_id:"$CUSTNAME",SALES:{$first:"$SALESINFO.NAMASALES"},TOTAL : { $sum: {$multiply:["$QTY","$PRICE"]}}}},
{$sort:{TOTAL:-1}}
])
它会返回这样的输出:
[{"_id":"CUSTOMER ABC","SALES":(Array) 2 Elements,"TOTAL":231986}]
然后我做$unwind,将数组元素更改为字段元素:
db.torder.aggregate([
{$match:{$and:[{TANGGALPI:{$gte:'2019-01-01'}},{TANGGALPI:{$lte:'2019-12-31'}}]}},
{$lookup:{
from:"tsales",
localField:"IDSALES",
foreignField:"SALESCODE",
as:"SALESINFO"
}},
{$unwind : "$SALESINFO"},
{$group:{
_id:"$CUSTNAME",SALES:{$first:"$SALESINFO.NAMASALES"},TOTAL : { $sum: {$multiply:["$QTY","$PRICE"]}}}},
{$sort:{TOTAL:-1}}
])
它的输出变成:
[{"_id":"CUSTOMER ABC","SALES":"Peter","TOTAL":463972}] => total will become 2 times than before
我检查了我的 tsales 集合,Sales Peter 有两行值,所以使总和值重复,如何使用 $unwind 对单行 tsales 集合进行正确的计算总和
我想要这样的输出:
[{"_id":"CUSTOMER ABC","SALES":"Peter","TOTAL":231986}]
【问题讨论】:
标签: mongodb sum mongodb-query aggregation-framework