Mongodb Aggregate 쿼리는 Array의 개체 내부 필드를 기반으로 모든 값을 합산합니다.
Dec 11 2020
data
MongoDB에 다음과 같은 컬렉션 이 있습니다.
문서 1-
{
metadata:[
{
"title": "High",
"val": 12
},
{
"title": "Medium",
"val": 15
},
{
"title": "Low",
"val": 2
}
]
}
문서 2-
{
metadata:[
{
"title": "High",
"val": 10
},
{
"title": "Medium",
"val": 12
},
{
"title": "Low",
"val": 20
}
]
}
& 곧..
값을 val
기준으로 필드 를 집계하고 싶습니다 title
. 출력은 다음과 같아야합니다.
{
"High": 22,
"Medium": 27,
"Low": 22
}
어떻게해야합니까? 미리 감사드립니다.
답변
2 turivishal Dec 11 2020 at 12:51
$unwind
metadata
배열 분해$grpup
에 의해title
합산val
$group
null로 배열을 키와 값에서 객체로 변환$arrayToObject
하고 다음을 사용하여 객체를 병합합니다.$mergeObjects
db.collection.aggregate([
{ $unwind: "$metadata" }, { $group: {
_id: "$metadata.title", sum: { $sum: "$metadata.val" } } }, { $group: {
_id: null,
metadata: {
$mergeObjects: { $arrayToObject: [
[{ k: "$_id", v: "$sum" }]
]
}
}
}
}
])
운동장
1 ray Dec 11 2020 at 12:31
먼저 metadata
배열을 풀 수 있습니다 . 그런 다음 $ group 및$cond to $당신의 가치를 합산하십시오.
여기입니다 몽고 놀이터 참조하십시오.