I've below sample mongo document and want to flatten it for pagination purpose. I've seen various methods of doing it and found below one they to go.
[
{
"onbReqId": "ONB001",
"onbReqName": "Maruti Inc",
"leCases": [
{
"caseId": "CASE01",
"name": "Maruti Bangalore",
"city": "bangalore",
"contacts": [
{
"name": "Sales Person MB01",
"phone": "080-12345678"
},
{
"name": "Sales Person MB02",
"phone": "080-78945612"
}
],
"tasks": [
{
"taskId": "task-101",
"taskName": "TASKNAME-1"
},
{
"taskId": "task-102",
"taskName": "TASKNAME-2"
}
]
}
]
}
]
I'm using below code to flatten the 3 levels, is there any better approach? What are other ways to achieve the pagination, how to do it in efficient way.
db.onb.aggregate([
{
$unwind:"$leCases"
},
{
$addFields: {
"caseId": "$leCases.caseId",
"caseName": "$leCases.name",
"contacts": "$leCases.contacts",
}
},
{
"$replaceRoot": {
"newRoot": {
"$mergeObjects": [
{
"onbReqId": "$onbReqId",
"onbReqName": "$onbReqName",
"caseId": "$caseId",
"caseName": "$caseName",
"contacts": "$contacts",
},
"$leCases"
]
}
}
},{
$unwind:"$tasks"
},
{
"$replaceRoot": {
"newRoot": {
"$mergeObjects": [
{
"onbReqId": "$onbReqId",
"onbReqName": "$onbReqName",
"caseId": "$caseId",
"caseName": "$caseName",
"contacts": "$contacts",
},
"$tasks"
]
}
}
}
]);