在Mongodb中将字符串更新为子代的ObjectId

时间:2018-09-12 20:04:17

标签: mongodb find updates

我有一个名为“用户”的集合,该集合内部有一个名为“ companies”的数组。这意味着每个“用户”可以拥有一个或多个“公司”。一个文档看起来像这样。

{
"_id" : ObjectId("5b0b5aed0902a519d0440b37"),
"email" : "mario@example.com",
"name" : "Mario",
"last_name" : "Perez",
"companies" : [ 
    {
        "id" : "5b0b456bf7a87830b4d20058",
        "name" : "COMPANY A"
    }, 
    {
        "id" : "5b0b755b576ac70014ad441c",
            "name" : "COMPANY B"
        }
    ]
}

我想将所有companies.id(字符串)转换为ObjectId。

因此,我进行了此更新,但实际上没有用。我认为尝试将字符串(companies.id)转换为ObjectId的方式存在问题。

db.getCollection('users').update({ "_id": ObjectId("5b0b5aed0902a519d0440b37") }, {$set: {"companies.$[].id": ObjectId("companies.$[].id")}}, {multi: true})

如果您能帮助我,我将不胜感激。

1 个答案:

答案 0 :(得分:0)

好吧,尝试了不同的方式后,我得到了答案!

db.getCollection('users').find({ "_id": ObjectId("5b0b5aed0902a519d0440b37") }).forEach(function (x) {
x.companies.forEach(function (y) {
    var id_object = new ObjectId(y.id);
    db.getCollection('users').update(x,{$set: {"companies.$[].id": id_object}});
});

});