Skip to content Skip to sidebar Skip to footer

$filter Upto 3 Nested Level In Mongodb

I have a below collection [ { 'Array1': [ { 'Array2': [ { 'name': '6666', 'Array3': [ { '_id': 128938120, 'nest'

Solution 1:

Basically you have to use $filter for each level to apply your condition and $map for each array that has nested array inside. That's because you want to pass filtered array to the output. So there will be 3 filters and 2 maps. Indentations might be really helpful in this case. Try:

db.collection.aggregate([
    {
        $project: {
            Array1: {
                $map: {
                    input: { $filter: { input: "$Array1", as: "a1", cond: { $eq: ["$$a1.name", "old apartment" ] } } },
                    as: "a1",
                    in: {
                        name: "$$a1.name",
                        Array2: {
                            $map: {
                                input: { $filter: { input: "$$a1.Array2", as: "a2", cond: { $eq: [ "$$a2.name", "6666" ] } } },
                                as: "a2",
                                in: {
                                    name: "$$a2.name",
                                    Array3: { $filter: { input: "$$a2.Array3", as: "a3", cond: { $eq: [ "$$a3.nest", "nokia" ] } } }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
])

Mongo playground

Post a Comment for "$filter Upto 3 Nested Level In Mongodb"