2014-09-03 103 views
1

我有这个对象,我想更新集合中所有文档的名称字段“field”。我读了mongodb文档,它说$rename在这种情况下不起作用。我应该执行一个foreach,但我不知道如何哪个命令使用如何更新嵌套在MongoDB数组中的名称字段

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

回答

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值。

-2

$用于更新行动命名修改应该工作(http://docs.mongodb.org/manual/reference/operator/update/rename/

想像你们这样一个集合:

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

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

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

而doc ument将作如下安排: { “了newName”: “富”, “数组”: { “场”: “名”} ] }

为了更新所有收集你应该使用多选项,如下所示:

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

问候