[英]Replacing embedded document in array in MongoDB
有沒有一種簡單的方法來替換陣列中的整個嵌入式文檔? 說替換:
{
"_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"
}
您正在使用“對象數組”模式。 您可以使用位置運算符 ,它應該如下所示:
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"
}
在這種情況下,您可以使用點表示法輕松更新所需的項目。
var newValue = { "name" : "name6", "xyz..." : "xyz5...", "morefields..." : "fields..." };
coll.update({_id: 2}, { $set: { "users.2" : newValue } });
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.