如何更新嵌套在mongodb中的数组中的名称字段

时间:2014-09-03 19:08:22

标签: mongodb

我有这个对象,我想更新集合中所有文档的名称字段“field”。我阅读了mongodb文档,并说$rename在这种情况下不起作用。我应该执行forEach但我不知道使用哪个命令

{
  "name": "foo"
  "array": [
   "object": {
     "field": "name"
   }
   ]
}

2 个答案:

答案 0 :(得分:2)

手动执行:

db.collection.find().forEach(function(doc) { 
    if (doc.array) { 
        doc.array.forEach(function(edoc) { 
            if (edoc.object) { 
                    doc.object.new_field = edoc.object.field
                    delete edoc.object.field 
            }
        })
        db.test.update({ "_id" : doc._id }, doc)
    }
})

这应该让你开始。它处理缺少或空array个数组,但不处理错误类型的array值或错误类型的object值。

答案 1 :(得分:-2)

$ rename modifier for update Ops应该有效(http://docs.mongodb.org/manual/reference/operator/update/rename/

想象一下像你这样的系列:

{
    "name": "foo",
    "array":[
        {"field": "name" }
    ]
}

您将能够做到这样的事情:

db.rename.update({},{$rename:{"name":"newName"}});

文件如下:     {         “newName”:“foo”,         “阵列”:[             {“field”:“name”}         ]     }

为了更新所有集合,您应该使用multi选项,如下所示:

db.rename.update({},{$rename:{"name":"newName"}}, {multi:true})

此致