Добрый день, есть такая структура(упрощенная) данных по движению номенклатуры по складам.
db.stockFlow.insertMany([
{
//доп информация, ссылки на документы, кто создал, когда, итп.
stockID: [{value:10}],
inOut: [{value: ‘in’}],
items: [
{itemID: [{value: 201}], quantity: [{value: 30}]},
{itemID: [{value: 301}], quantity: [{value: 20}]},
{itemID: [{value: 401}], quantity: [{value: 10}]},
]
},
{
stockID: [{value:10}],
inOut: [{value: ‘out’}],
items: [
{itemID: [{value: 201}], quantity: [{value: 20}]},
{itemID: [{value: 301}], quantity: [{value: 10}]},
{itemID: [{value: 401}], quantity: [{value: 5}]},
]
}
]);
Нужно сгруппировать по:
⁃ stockID.value
⁃ items.itemID.value
⁃ inOut.value
Получить итоговую сумму по - `items.itemID.quantity.value`
Понимаю, что структура не очень оптимальная, по правильному нужно лишние массивы с объектам убрать. Второй день мучаюсь, не могу осилить. Помогите)
db.tmp.aggregate([{ $unwind : "$items" }, {$unwind: "$items.itemID"}, {$unwind: "$items.quantity"}, {$group: {"_id": {"stockID_value": "$stockID.value", "inOut_value": "$inOut.value", "itemID_value": "$items.itemID.value"}, "res": {$sum: "$items.quantity.value"}}}])
{ "_id" : { "stockID_value" : [ 10 ], "inOut_value" : [ "out" ], "itemID_value" : 401 }, "res" : 5 }
{ "_id" : { "stockID_value" : [ 10 ], "inOut_value" : [ "out" ], "itemID_value" : 301 }, "res" : 10 }
{ "_id" : { "stockID_value" : [ 10 ], "inOut_value" : [ "in" ], "itemID_value" : 201 }, "res" : 30 }
{ "_id" : { "stockID_value" : [ 10 ], "inOut_value" : [ "in" ], "itemID_value" : 301 }, "res" : 20 }
{ "_id" : { "stockID_value" : [ 10 ], "inOut_value" : [ "in" ], "itemID_value" : 401 }, "res" : 10 }
{ "_id" : { "stockID_value" : [ 10 ], "inOut_value" : [ "out" ], "itemID_value" : 201 }, "res" : 20 }