更新MongoDB中的嵌入式数组

时间:2015-07-16 21:04:58

标签: arrays mongodb

我正在尝试更新集合结构中的嵌入式数组文档

        {
            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"}});

他们有什么方法可以更新而不会丢失数组中的其他元素吗?

1 个答案:

答案 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}});
});