我正在尝试更新集合结构中的嵌入式数组文档
{
id: 1,
fields:[
{
"lang" : "eng","embeddedArray" : ["A","B","C"]
},
{
"lang" : "abcd","embeddedArray" :["A","D","E"]
}]
}
我想使用in embeddedArray更新A我尝试使用此查询进行更新,但它正在使用' a'更新整个数组。而不是[' a'' B'' C']
db.collectionName.update({"fields.embeddedArray" : 'A'}, {"$set" : {"fields.$.embeddedArray" : "a"}});
他们有什么方法可以更新而不会丢失数组中的其他元素吗?
答案 0 :(得分:0)
请检查以下查询:
db.collectionName.find({"fields":{$elemMatch:
{"lang":"A"}}}).forEach(function(doc){
var fields = doc.fields;
var i,k;
for( i=0; i<fields.length; i++ )
{
k = fields[i].embeddedArray.indexOf("A");
fields[i].embeddedArray.splice(k,1,"a");
}
db.collectionName.update({ _id: doc._id},{$set:{"fields": fields}});
});