Consulta agregada de Mongodb para sumar todos los valores basados en campos dentro de objetos en una matriz
Dec 11 2020
Tengo una colección data
en MongoDB que se ve así:
documento 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
}
]
}
& pronto..
Deseo agregar el val
campo en función del title
valor. La salida debería verse así:
{
"High": 22,
"Medium": 27,
"Low": 22
}
¿Cómo logro esto? Gracias por adelantado.
Respuestas
2 turivishal Dec 11 2020 at 12:51
$unwind
deconstruirmetadata
matriz$grpup
portitle
y hacer la suma deval
$group
por nulo, convertir matriz en objeto de clave y valor por$arrayToObject
, y fusionar objetos usando$mergeObjects
db.collection.aggregate([
{ $unwind: "$metadata" }, { $group: {
_id: "$metadata.title", sum: { $sum: "$metadata.val" } } }, { $group: {
_id: null,
metadata: {
$mergeObjects: { $arrayToObject: [
[{ k: "$_id", v: "$sum" }]
]
}
}
}
}
])
Patio de recreo
1 ray Dec 11 2020 at 12:31
Primero puede $ desenrollar la metadata
matriz. Luego usa $ group y$cond to $suma tus valores.
Aquí está el parque infantil mongo para su referencia.