Как предотвратить дублирование суммы после поиска и раскрутки mongodb - PullRequest
1 голос
/ 20 мая 2019

У меня есть сборщик данных (набор продаж, клиентов, промежуточных итогов и счетов-фактур) и 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}]

1 Ответ

0 голосов
/ 20 мая 2019

Вам просто нужно поменять местами $group и $lookup stage.

db.torder.aggregate([
  { "$match": {
    "TANGGALPI": { "$gte": "2019-01-01", "$lte": "2019-12-31" }
  }},
  { "$group": {
    "_id": "$CUSTNAME",
    "IDSALES": { "$first": "$IDSALES" },
    "TOTAL": { "$sum": { "$multiply": ["$QTY", "$PRICE"] } },
    "duplicateNames": { "$push": "$name" }
  }},
  { "$lookup": {
    "from": "tsales",
    "localField": "IDSALES",
    "foreignField": "SALESCODE",
    "as": "SALES"
  }},
  { "$addFields": {
    "SALES": { "$arrayElemAt": ["$SALES.NAMASALES", 0] }
  }},
  { "$sort": { "TOTAL": -1 } }
])
...