Пн goose ADDING / SUMING значение массива поддокументов, которое находится в другом массиве поддокументов - PullRequest
0 голосов
/ 30 мая 2020

Мой документ выглядит так:

_id:'111'
products:[
   {
    _id:'pqr'
    nums:[
      {_id:'aaa',
      quantity:30
      },
      {_id:'bbb',
       quantity:40
      }
    ]
   }
]

Мне нужно получить:

(i) суммирование поля количества, которое находится внутри поддокумента nums, которое снова находится в поддокументе продуктов.

(ii) массив продуктов, который должен быть возвращен как единое целое (с вычисленным количеством внутри него И субдокументом nums как есть)

Ниже показано, как я хочу, чтобы мой результат был таким:

products:[
  {
   _id: 'pqr',
   nums:[
      {_id:'aaa',
      quantity:30
      },
      {_id:'bbb',
       quantity:40
      }
   ],
   quantity: 70
  }
]

До сих пор я пробовал это делать

    Shop.aggregate([

         {$match: {'_id':'111'},

         {$unwind: "$products"},

         {$group:{
            _id : "$_id",
            nums:{$last:"$nums"},
            quatity: //I have no idea how to get this total quantity which corresponds to _id:'pqr'
          }
         }

    ])

Есть какие-нибудь проблемы, как это сделать?

1 Ответ

1 голос
/ 30 мая 2020

Это хороший вариант использования $reduce:

Shop.aggregate([
     {$match: {'_id':'111'},
     {$unwind: "$products"},
     {$addFields:{
          "products.quantity":{
              $reduce:{
                   input: "$products.nums",
                   initialValue: 0
                   in: {$sum:["$$value","$$this.quantity"]}
              }
          }
      }}
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...