db.collection.aggregate([
{//Denormalize first level
"$unwind": "$newList"
},
{//Second nested level
"$unwind": "$newList.newPMBList"
},
{//Deep nested last level
"$unwind": "$newList.newPMBList.newPMList"
},
{
$group: {//Grouping back
"_id": null,
"newList": {
$push: "$newList.newPMBList.newPMList"
}
}
},
{
$project: {//Finding unique
newList: {
$setUnion: [
"$newList",
"$newList"
]
}
}
}
])
मेरा सुझाव है कि आप first
. का उपयोग करके अन्य फ़ील्ड शामिल करें group
. में संचायक और उन्हें project
. में सुरक्षित रखें ।
आप नीचे दिए गए तरीके से इसे और सरल बना सकते हैं
db.test.aggregate([
{
"$unwind": "$newList"
},
{
"$unwind": "$newList.newPMBList"
},
{
"$unwind": "$newList.newPMBList.newPMList"
},
{
$group: {
"_id": null,
"newList": {//addToSet keeps distinct
$addToSet: "$newList.newPMBList.newPMList"
}
}
}
])
इसके अलावा, एक डीनॉर्मलाइज़ेशन को छोड़कर खरीदें, लेकिन यह सरणियों की सरणी देता है।
db.test.aggregate([
{
"$unwind": "$newList"
},
{
"$unwind": "$newList.newPMBList"
},
{
$group: {
"_id": null,
"newList": {
$addToSet: "$newList.newPMBList.newPMList"
}
}
}
])
यदि आप किसी अन्य स्तर को छोड़ते हैं, तो यह परिणाम में एक और नेस्टेड स्तर जोड़ देगा।