Mongodb Aggregate query pour additionner toutes les valeurs en fonction des champs à l'intérieur des objets d'un tableau
Dec 11 2020
J'ai une collection data
dans MongoDB qui ressemble à ceci -
document 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
}
]
}
& bientôt..
Je souhaite agréger le val
champ en fonction de la title
valeur. La sortie devrait ressembler à -
{
"High": 22,
"Medium": 27,
"Low": 22
}
Comment y parvenir? Merci d'avance.
Réponses
2 turivishal Dec 11 2020 at 12:51
$unwind
déconstruire lemetadata
tableau$grpup
partitle
et faire la somme deval
$group
par null, convertir un tableau en objet à partir de la clé et de la valeur par$arrayToObject
, et fusionner des objets en utilisant$mergeObjects
db.collection.aggregate([
{ $unwind: "$metadata" }, { $group: {
_id: "$metadata.title", sum: { $sum: "$metadata.val" } } }, { $group: {
_id: null,
metadata: {
$mergeObjects: { $arrayToObject: [
[{ k: "$_id", v: "$sum" }]
]
}
}
}
}
])
Terrain de jeux
1 ray Dec 11 2020 at 12:31
Vous pouvez d'abord $ dérouler le metadata
tableau. Ensuite, utilisez $ group et$cond to $additionnez vos valeurs.
Voici le terrain de jeu mongo pour votre référence.