Mongodb Aggregate-Abfrage zum Summieren aller Werte basierend auf Feldern in Objekten in einem Array
Dec 11 2020
Ich habe eine Sammlung data
in MongoDB, die so aussieht -
Dokument 1-
{
metadata:[
{
"title": "High",
"val": 12
},
{
"title": "Medium",
"val": 15
},
{
"title": "Low",
"val": 2
}
]
}
document2 -
{
metadata:[
{
"title": "High",
"val": 10
},
{
"title": "Medium",
"val": 12
},
{
"title": "Low",
"val": 20
}
]
}
& demnächst..
Ich möchte das val
Feld basierend auf dem title
Wert aggregieren . Die Ausgabe sollte aussehen wie -
{
"High": 22,
"Medium": 27,
"Low": 22
}
Wie erreiche ich das? Danke im Voraus.
Antworten
2 turivishal Dec 11 2020 at 12:51
$unwind
metadata
Array dekonstruieren$grpup
vontitle
und machen Summe vonval
$group
Konvertieren Sie mit null das Array von Schlüssel und Wert durch in ein Objekt$arrayToObject
und führen Sie Objekte mit zusammen$mergeObjects
db.collection.aggregate([
{ $unwind: "$metadata" }, { $group: {
_id: "$metadata.title", sum: { $sum: "$metadata.val" } } }, { $group: {
_id: null,
metadata: {
$mergeObjects: { $arrayToObject: [
[{ k: "$_id", v: "$sum" }]
]
}
}
}
}
])
Spielplatz
1 ray Dec 11 2020 at 12:31
Sie können das metadata
Array zuerst $ abwickeln . Verwenden Sie dann $ group und$cond to $summiere deine Werte.
Hier ist der Mongo-Spielplatz als Referenz.