У меня есть сборщик данных (набор продаж, клиентов, промежуточных итогов и счетов-фактур) и tsales (набор информации о продажах, он имеет 1 или более контактов), затем я хочу проверить, сколько всего заказов каждого клиента за текущий период, Вот мой код, прежде чем положить $ раскрутить:
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 есть значения из двух строк, поэтому создайте сумму с дубликатами, как сделать правильную сумму вычисления с одной строкой коллекции tsales с помощью $ unwind
Я хочу вывод, подобный этому:
[{"_id":"CUSTOMER ABC","SALES":"Peter","TOTAL":231986}]