2014-05-19 36 views
0

如何在MongoDB中執行動態文檔更新? (從終端應用蒙戈,通過使用額外的庫,例如貓鼬爲的NodeJS)如何在MongoDB中執行動態文檔更新?

我第一次嘗試似乎並沒有實際更新任何內容:

db.people.find().forEach(function(myDoc) { myDoc.field = myDoc.field.replace(/\/./g, '/'); });

在更新文件http://docs.mongodb.org/manual/reference/method/db.collection.update/#update-parameter似乎只是討論「靜態」更新(因此您不能使用文檔屬性的存在值來確定新值應該是什麼)。

我需要使用MapReduce功能嗎?

+0

無法更新字段的值基於目前「另一個」字段的價值。但是,你所做的只是在選擇方面的一個「正則表達式」匹配,並在「更新」一方更新一個「固定」值。那麼,爲什麼你不能簡單地做到這一點? –

+0

@NeilLunn這個值是唯一的,所以如果我正確理解你的話,那就意味着我會被迫爲n個文件運行n個查詢,這聽起來並不好玩。 – Trindaz

回答

1

你得做一次這個文檔是正確的做法,但你需要調用save對收集到的更改承諾myDoc

db.people.find().forEach(function(myDoc) { 
    myDoc.field = myDoc.field.replace(/\/./g, '/'); 
    db.people.save(myDoc); 
}); 
+0

使用此解決方案後的其他觀察結果:來自'db.people.find()'的輸出中的字段順序現在已變爲幾乎與之前相同,但_id首先出現在列表中。 IDK這意味着什麼,如果有的話,但它使我想知道在使用'db.people.save()' – Trindaz

+0

@Trindaz後文檔狀態還有什麼改變這是正常的:http://stackoverflow.com/questions/5046835/mongodb -field階和文檔位置變化後更新 – JohnnyHK