Consulta agregada Mongodb para somar todos os valores com base em campos dentro de objetos em um Array
Dec 11 2020
Eu tenho uma coleção data
no MongoDB que se parece com isto -
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
}
]
}
& em breve..
Desejo agregar o val
campo com base no title
valor. A saída deve ser semelhante a -
{
"High": 22,
"Medium": 27,
"Low": 22
}
Como faço para conseguir isso? Desde já, obrigado.
Respostas
2 turivishal Dec 11 2020 at 12:51
$unwind
desconstruirmetadata
matriz$grpup
portitle
e fazer a soma deval
$group
por nulo, converte array em objeto de chave e valor por$arrayToObject
, e mescla 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" }]
]
}
}
}
}
])
Parque infantil
1 ray Dec 11 2020 at 12:31
Você pode primeiro $ desenrolar a metadata
matriz. Então use $ group e$cond to $some seus valores.
Aqui está o playground mongo para sua referência.
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas