0

I have a collection name users showing sample documents

{
    "userid": "6492hwwd26362",
    "open": false,
    "arr1": [{
        "name": "John",
        "arr2": [{
                "id": "1",
                "name": "name1"
            },
            {
                "id": "2",
                "name": "name2"
            }
        ]
    }, {
        "name": "Bill",
        "arr2": [{
                "id": "3",
                "name": "name3"
            },
            {
                "id": "4",
                "name": "name4"
            }
        ]
    }]
}

Now I want to update multiple array elements for example I want to update name value to "name22" where id is 2 and want to update name value to "name33" where id is 3 using single query, consider id is unique.

I have tried this query below

db.users.update(
    {
    "arr1": {
        $all: [{
            $elemMatch: {
               "arr2.id": "2"
            }
        }, {
            $elemMatch: {
                  "arr2.id": "3"
            }
        }]
    }
},
    {
        "$set": { 
           "arr1.$.arr2.$[inner1].name": "name22",
           "arr1.$.arr2.$[inner2].name": "name33"

        }
    },
    {
    "arrayFilters": [{
            "inner1.id": "2"
        },
        {
            "inner2.id": "3"
        }
    ]
}
)

But not working as expected.

Dev
  • 413
  • 10
  • 27
  • 2
    `.updateMany({ "arr1.arr2.id": { "$in": [ "2", "3" ] } },{ "$set": { "arr1.$[].$[inner1].name": "name22". "arr1.$[].$[inner2].name": "name33" } },{ "arrayFilters": [{ "inner1.id": "2" },{ "inner2.id": "3" }] })` – Neil Lunn Oct 10 '19 at 10:07
  • 1
    Or if you prefer: `.updateMany({ "arr1.arr2.id": { "$in": [ "2", "3" ] } },{ "$set": { "arr1.$[outer].$[inner1].name": "name22". "arr1.$[outer].$[inner2].name": "name33" } },{ "arrayFilters": [{ "outer.arr2.id": { "$in": ["2", "3"] } }, { "inner1.id": "2" },{ "inner2.id": "3" }] })` – Neil Lunn Oct 10 '19 at 10:13
  • Getting error like Cannot apply array updates to non-array element 0: – Dev Oct 10 '19 at 10:57
  • After correcting first query now it's working perfectly thanks!! – Dev Oct 10 '19 at 11:25

0 Answers0