Использование $ project в агрегатной функции MongoDB для возврата определенных данных после $ group - PullRequest
1 голос
/ 06 июня 2019

Я использую агрегатную функцию MongoDB, и после $ match и $ group у меня есть этот массив данных

[ { _id: { item: 'AAA' }, total: 66 },
{ _id: { item: 'BBB' }, total: 3 } ]

Можно ли использовать $ project, чтобы превратить окончательный результат в

[ {AAA: 66}, {BBB: 3} ]

А чтобы сделать его более увлекательным, скажем, в результатах также есть {CCC: 0}, как мы можем отфильтровать и удалить элемент CCC, если его значение равно 0?

1 Ответ

2 голосов
/ 06 июня 2019

Вы можете добавить следующие этапы после вашего финального $group этап

db.collection.aggregate([
  { "$group": {
    "_id": null,
    "data": {
      "$push": {
        "k": "$_id.item",
        "v": "$total"
      }
    }
  }},
  { "$replaceRoot": {
    "newRoot": {
      "$arrayToObject": "$data"
    }
  }}
])

выход

[
  {
    "AAA": 66,
    "BBB": 3
  }
]
...