आप $objectToArray
का लाभ उठा सकते हैं और $arrayToObject
ऑपरेटर आपकी ऑब्जेक्ट कुंजियों को गतिशील रूप से पढ़ने के लिए। _id
. से छुटकारा पाने के लिए और name
वे फ़ील्ड जिन्हें आप $filter
कर सकते हैं द्वारा $type
.
db.collection.aggregate([
{
$project: {
_id: 0,
fields: {
$filter: {
input: { $objectToArray: "$$ROOT" },
cond: { $eq: [ { $type: "$$this.v" }, "double" ] }
}
}
}
},
{
$unwind: "$fields"
},
{
$group: {
_id: "$fields.k",
total: { $sum: "$fields.v" }
}
},
{
$group: {
_id: null,
aggregates: { $push: { k: "$_id", v: "$total" } }
}
},
{
$replaceRoot: {
newRoot: { $arrayToObject: "$aggregates" }
}
}
])