是否有一种简单的方法可以替换阵列中的整个嵌入式文档? 说替换:
{
"_id" : "2",
"name" : "name2",
"xyz..." : "xyz2..."
}
使用:
{
"_id" : "2",
"name" : "name6",
"xyz..." : "xyz5..."
"morefields..." : "fields..."
}
搜索_id(嵌入式)。或者我是否需要使用$ set?
单独替换每个字段{
"_id" : "2",
"users" : [{
"_id" : "1",
"name" : "name1",
"xyz..." : "xyz1..."
}, {
"_id" : "2",
"name" : "name2",
"xyz..." : "xyz2..."
}],
"name" : "main name"
}
答案 0 :(得分:20)
您正在使用“对象数组”模式。您可以使用positional operator,它应该如下所示:
coll.update( {'_id':'2', 'users._id':'2'}, {$set:{'users.$':{ "_id":2,"name":"name6",... }}}, false, true)
根据我的经验,如果对象具有自然ID,则“对象数组”模式不是最佳的。在您的情况下,可以将其建模为以下内容:
{
"_id" : "2",
"users" :
{ "1" : { "name" : "name1", "xyz..." : "xyz1..." },
"2" : { "name" : "name2", "xyz..." : "xyz2..." }
}
"name" : "main name"
}
在这种情况下,您可以使用dot notation轻松更新所需的项目。
var newValue = { "name" : "name6", "xyz..." : "xyz5...", "morefields..." : "fields..." };
coll.update({_id: 2}, { $set: { "users.2" : newValue } });