2014-09-03 107 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}) 

問候