mongodb,更新数组中的数组元素

时间:2017-10-25 21:34:17

标签: arrays mongodb

我遇到了麻烦。 我需要更新nected array(数组中的数组)中的值。 例如,我有这样的文件:

{
    "_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")
        ]
    }
    ]
}

我需要从确切的用户中删除确切的技术。我只知道:

_id - 全球文件ID

userId:'users.id'元素

technologyId:'用户。$。技术。$。id'应该删除的技术项目ID

mongo的文档说我不能在更新语句中使用两个$,但是可能存在一些行为来解决这个问题?

1 个答案:

答案 0 :(得分:1)

尝试以下方法:

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

结果应为:

{ 
    "_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")
            ]
        }
    ]
}