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"
]
}
}
}
])
Tôi khuyên bạn nên bao gồm các trường khác bằng cách sử dụng first
bộ tích lũy trong nhóm group
và bảo quản chúng trong project
.
Bạn có thể đơn giản hóa thêm như bên dưới
db.test.aggregate([
{
"$unwind": "$newList"
},
{
"$unwind": "$newList.newPMBList"
},
{
"$unwind": "$newList.newPMBList.newPMList"
},
{
$group: {
"_id": null,
"newList": {//addToSet keeps distinct
$addToSet: "$newList.newPMBList.newPMList"
}
}
}
])
Hơn nữa, hãy mua bỏ qua một hàm không chuẩn hóa, nhưng nó trả về mảng các mảng.
db.test.aggregate([
{
"$unwind": "$newList"
},
{
"$unwind": "$newList.newPMBList"
},
{
$group: {
"_id": null,
"newList": {
$addToSet: "$newList.newPMBList.newPMList"
}
}
}
])
Nếu bạn bỏ qua một cấp độ khác, nó sẽ thêm một cấp độ lồng nhau nữa trong kết quả.