जैसा कि @Philipp ने अपनी टिप्पणियों में ठीक ही उल्लेख किया है
हालाँकि, यदि आप पहले से जानते थे कि कुंजियाँ क्या हैं तो आप एकत्रीकरण ऑपरेटरों का उपयोग कर सकते हैं $शाब्दिक
, $addToSet
और $setUnion
वांछित परिणाम प्राप्त करने के लिए। एकत्रीकरण पाइपलाइन इस प्रकार होगी:
db.collection.aggregate([
{
"$project": {
"attrs.A1.key": { "$literal": "A1" },
"attrs.A1.type": "$attrs.A1.type",
"attrs.A1.value": "$attrs.A1.value",
"attrs.A2.key": { "$literal": "A2" },
"attrs.A2.type": "$attrs.A2.type",
"attrs.A2.value": "$attrs.A2.value"
}
},
{
"$group": {
"_id": "$_id",
"A1": { "$addToSet": "$attrs.A1" },
"A2": { "$addToSet": "$attrs.A2" }
}
},
{
"$project": {
"attrs": {
"$setUnion": [ "$A1", "$A2" ]
}
}
}
])
परिणाम :
/* 0 */
{
"result" : [
{
"_id" : ObjectId("55361320180e849972938fea"),
"attrs" : [
{
"type" : "T1",
"value" : "13",
"key" : "A1"
},
{
"type" : "T2",
"value" : "14",
"key" : "A2"
}
]
}
],
"ok" : 1
}