配列内のオブジェクト内のフィールドに基づいてすべての値を合計するMongodbAggregateクエリ
Dec 11 2020
私はdata
MongoDBに次のようなコレクションを持っています-
ドキュメント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
}
]
}
&など..
値に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
配列を$ unwindできます。次に、$ groupを使用して$cond to $値を合計します。
参考までに、モンゴの遊び場をご紹介します。