MongoDB:使用对象ID更新多维数组

时间:2016-10-28 08:37:12

标签: mongodb multidimensional-array

我正在使用Node.js和MongoDB开发一个简历数据库Web应用程序。我正在尝试更新位于多维数组中的单个记录。如果每个数组都有自己的对象ID,如何从 career_development 字段更新单个数组?

{
    "_id": ObjectId("57f35a25983d521a90518efd"),
    "email": "john.doe@gmail.com",
    "first_name": "John",
    "last_name": "Doe",
    "created_at": ISODate("2016-10-04T07:28:37.407Z"),
    "career_development": [
        {
            "_id": ObjectId("5811aefcb7880316e4497406"),
            "company_name": "TestCompanyName 1",
            "company_location": "Texas, United States"
        },
        {
            "_id": ObjectId("5811afb7b7880316e4497407"),
            "company_name": "TestCompanyName 2",
            "company_location": "South Carolina, United States"
        },
        {
            "_id": ObjectId("5811afbfb7880316e4497408"),
            "company_name": "TestCompanyName 3",
            "company_location": "Florida, United States"
        }
    ]
}

2 个答案:

答案 0 :(得分:1)

$ positional operatordot notation一起使用

db.collection.update(
    { "career_development._id": ObjectId("5811aefcb7880316e4497406") }, 
    { 
        "$set": { 
            "career_development.$.company_name": "TestCompanyName 1 Updated" 
        } 
    }
);

如果career_development是动态的,那么您可以使用bracket notation创建更新对象:

var dynamic_variable = posted_data.type,
    query = {},
    updateObj = { "$set": { } }; 

query[dynamic_variable +"._id"] = ObjectId("5811aefcb7880316e4497406"); 
updateObj["$set"][dynamic_variable +".$.company_name"] = "TestCompanyName 1 Updated"; 
db.collection.update(query, updateObj)

答案 1 :(得分:0)

你是说这个数组看起来像这样吗?如果不是这种情况,我们可以使用elemMatch来获取文档,循环并更新它。请告诉我,我将在此处发布查询。

"career_development": [
        {
            "_id": ObjectId("5811aefcb7880316e4497406"),
            "company_name": "TestCompanyName 1",
            "company_location": "Texas, United States"
        },
        {
            "_id": ObjectId("5811afb7b7880316e4497407"),
            "company_name": "TestCompanyName 2",
            "company_location": "South Carolina, United States"
        },
        {
            "_id": ObjectId("5811afbfb7880316e4497408"),
            "company_name": "TestCompanyName 3",
            "company_location": "Florida, United States"
        }
    ],
[
        {
            "_id": ObjectId("5811aefcb7880316e4497406"),
            "company_name": "TestCompanyName 1",
            "company_location": "Texas, United States"
        },
        {
            "_id": ObjectId("5811afb7b7880316e4497407"),
            "company_name": "TestCompanyName 2",
            "company_location": "South Carolina, United States"
        },
        {
            "_id": ObjectId("5811afbfb7880316e4497408"),
            "company_name": "TestCompanyName 3",
            "company_location": "Florida, United States"
        }
    ]