Сумма Mongodb после раскрутки массива вложенных объектов - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в агрегациях mongodb. Учитывая следующую коллекцию:

[
  {
    "ft": 1,
    "pippo": 10,
    "pluto": 5,
    "detail": [
      {
        "ft": 1,
        "pippo": 1,
        "pluto": 2
      },
      {
        "ft": 2,
        "pippo": 1,
        "pluto": 2
      },
      {
        "ft": 1,
        "pippo": 1,
        "pluto": 2
      },
      {
        "ft": 3,
        "pippo": 1,
        "pluto": 2
      }
    ]
  },
  {
    "ft": 2,
    "pippo": 4,
    "pluto": 3
  }, {
    "ft": 1,
    "pippo": 1,
    "pluto": 1
  }
]

, я хотел бы вычислить сумму всех элементов, имеющих "ft": 1. Я пробовал эту агрегацию после раскрутки элементов, содержащихся в массиве:

[
  {
    '$unwind': '$detail'
  }, {
    '$group': {
      '_id': '$ft', 
      'count': {
        '$sum': 1
      }, 
      'ft': {
        '$first': '$ft'
      }, 
      'pippo': {
        '$sum': '$pippo'
      }, 
      'pluto': {
        '$sum': '$pluto'
      }
    }
  }
]

И получил следующий неверный результат:

_id: 1,
count: 4,
pippo: 40,
pluto: 20

Правильный результат должен быть:

_id: 1,
count: 4, // all items having ft === 1
pippo: 13, // the sum of all pippo in all items where ft === 1
pluto: 10 // the sum of all pluto items where ft === 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...