0xff00ff
0xff00ff

Reputation: 133

mongodb, update array element in array

i have a trouble. i need to update value in nected array (array in array). For example i have document like this:

{
    "_id" : ObjectId("59eccf5ea7f6ff30be74d8ce"),
    "name" : "some name",
    "description" : "some description",
    "users" : [ 
    {
        "id" : ObjectId("59d1549f4f5c6f6e0f1d6576"),
        "technologies" : [
            {"id": ObjectId("59450bc718fda360fdf4a719")},       
        ]
    }, 
    {
        "id": ObjectId("59d1549e4f5c6f6e0f1d6571"),
        "technologies": [
            {"id": ObjectId("59450f8318fda360fdf4a78b")},
            {"id": ObjectId("59450bc718fda360fdf4a719")},
            {"id": ObjectId("59450e3f18fda360fdf4a767")}
        ]
    },
    {
        "id": ObjectId("59d154a44f5c6f6e0f1d65af"),
        "technologies": [
            ObjectId("59450f8318fda360fdf4a78b")
        ]
    }
    ]
}

i need to delete exact technology from exact user. i know only:

_id - global document id

userId: 'users.id' element

technologyId: 'users.$.technologies.$.id' id of technology item that should be deleted

documentation of mongo says that i cant use two $ in update statement, but maybe is exists some actions to awoid this?

Upvotes: 0

Views: 157

Answers (1)

cbartosiak
cbartosiak

Reputation: 785

Try the following:

db.yourColl.update(
    {
        "_id": ObjectId("59eccf5ea7f6ff30be74d8ce"),
        "users.id": ObjectId("59d1549e4f5c6f6e0f1d6571")
    },
    {
        "$pull": {
            "users.$.technologies": {
                "id": ObjectId("59450bc718fda360fdf4a719")
            }
        }
    }
)

The result should be:

{ 
    "_id" : ObjectId("59eccf5ea7f6ff30be74d8ce"), 
    "name" : "some name", 
    "description" : "some description", 
    "users" : [
        {
            "id" : ObjectId("59d1549f4f5c6f6e0f1d6576"), 
            "technologies" : [
                {
                    "id" : ObjectId("59450bc718fda360fdf4a719")
                }
            ]
        }, 
        {
            "id" : ObjectId("59d1549e4f5c6f6e0f1d6571"), 
            "technologies" : [
                {
                    "id" : ObjectId("59450f8318fda360fdf4a78b")
                }, 
                {
                    "id" : ObjectId("59450e3f18fda360fdf4a767")
                }
            ]
        }, 
        {
            "id" : ObjectId("59d154a44f5c6f6e0f1d65af"), 
            "technologies" : [
                ObjectId("59450f8318fda360fdf4a78b")
            ]
        }
    ]
}

Upvotes: 2

Related Questions