MongoDB - Как сгруппировать по двум полям и суммировать значения поля? - PullRequest
0 голосов
/ 17 марта 2020

У меня есть массив json, как это и как группировать по itemId и другая дата :

let data=[
           {itemId:'001', tranDate:'2020/03/15', qty:10},
           {itemId:'001', tranDate:'2020/03/15', qty:30},
           {itemId:'002', tranDate:'2020/03/15', qty:20},
           {itemId:'001', tranDate:'2020/03/16', qty:50},
         ]

Я хочу получить результат, как на картинке ниже:

Require output

Пожалуйста, помогите мне в этом.

1 Ответ

0 голосов
/ 17 марта 2020

Вы можете использовать агрегацию MongoDB для этого:

db.collection.aggregate([
  /** group on itemId & tranDate & sum qty field values */
  {
    $group: { _id: { itemId: "$itemId", k: "$tranDate" }, v: { $sum: "$qty" } }
  },
  /** Push entire data into data field [{k :k...,v:v...},{k :k...,v:v...}] */
  {
    $project: {
      _id: 0,
      data: {
        $arrayToObject: [
          [
            { k: "$_id.k", v: "$v" },
            { k: "itemId", v: "$_id.itemId" }
          ]
        ]
      }
    }
  },
  /** Replace data as new root for each document */
  { $replaceRoot: { newRoot: "$data" } }
]);

Тест: MongoDB-Playground

Ссылка: $ group , $ project , $ arrayToObject , $ replace Root

...