У меня есть документы с той же структурой, что я хочу объединить в один, используя $ sum. Вот пример моего документа.Совокупные вложенные массивы в соответствии с их идентификатором
{
"_id" : 50,
"revenue" : 5000
"spendings" :[
{
"id" : 1
"catalogue" [
{
"id": 5
"viewcount": 150
"value": 10
},
{
"id": 6
"viewcount": 500
"value": 20
}
]
},
{
"id": 2
"catalogue" [
{
"id": 3
viewcount: 150
value: 10
}
]
}
}
и
{
"_id" : 51,
"revenue" : 6000
"spendings" :[
{
"id" : 1
"catalogue" [
{
"id": 5
"viewcount": 100
"value": 5
},
{
"id": 6
"viewcount": 400
"value": 15
}
]
},
{
"id": 2
"catalogue" [
{
"id": 3
viewcount: 600
value: 30
}
]
}
}
Я хочу, чтобы создать один документ из тех двух, где я использую $ сумму сложить соответствующие идентификаторы. Результат должен выглядеть так.
{
"_id" : 52,
"revenue" : 11000
"spendings" :[
{
"id" : 1
"catalogue" [
{
"id": 5
"viewcount": 250
"value": 15
},
{
"id": 6
"viewcount": 900
"value": 35
}
]
},
{
"id": 2
"catalogue" [
{
"id": 3
viewcount: 750
value: 40
}
]
}
}
но только один массив используется. Есть ли возможность группировать массив внутри другого массива?
То, что я пытался до сих пор:
db.conversion.aggregate([
{ "$match": { "revenue" : { "$gte" : 5000 , "$lte" : 6000 } } },
{ "$unwind": "$spendings" },
{ "$unwind": "$spendings.catalogue" },
{
"$group": {
"_id": { "spendid": "$spendings.id", "catalogueid": "$spendings.catalogue.id"},
"rv": { "$sum": "$revenue" },
"catvw": { "$sum": "$spendings.catalogue.viewcount" },
"catval": { "$sum": "$spendings.catalogue.value" }
}
},
{
"$group": {
"_id": null,
"rev": { "$first": "$rv" },
"spendings": {
"$push": {
"id": "$spendid",
"catid": "$"
"catview": "$catvw" ,
"catvalue": "$catval"
}
}
}
}
])
но не работает
@MarkusWMahlberg Я добавил то, что я пробовал в описании. – adpap