mongodb - How to flatten mongo colletion nested arrays - Stack Overflow

admin2025-04-16  4

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"
                ]
            }
        }
    }
]);
转载请注明原文地址:http://anycun.com/QandA/1744769055a87360.html