我有一个名为“用户”的集合,该集合内部有一个名为“ 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})
如果您能帮助我,我将不胜感激。
答案 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}});
});
});