2012-09-11 77 views
0

鑑於類似的文件大(百萬+)集合:的MongoDB:修改每個文件在服務器上

{ _id : ObjectId, "a" : 3, "b" : 5 } 

什麼是直接在服務器上處理這些文件的最有效的方式,與結果添加到每個相同集合中的文檔?例如,添加一個密鑰c,其值等於a+b

{ _id : ObjectId, "a" : 3, "b" : 5, "c" : 8 } 

我更喜歡在shell中這樣做。

似乎find().forEach()會浪費數據庫和shell之間的傳輸時間,mapReduce()似乎打算將對象組處理成彙總數據(雖然我可能會誤解)。

編輯:我寧願不阻止的解決方案,如果有一個(比使用在客戶端上的光標等)...

+0

似乎我可以用db.eval()來做到這一點:http://www.mongodb.org/display/DOCS/Server-side+Code+Execution#Server-sideCodeExecution-Using%7B%7Bdb.eval%28 %29%7D%7D,但這會阻止。我認爲update()可能會起作用,但似乎無法在update()中引用迭代文檔:http://stackoverflow.com/questions/3788256/mongodb-updating-documents-using-數據從最相同文檔。所以,似乎並沒有阻止除了客戶端遊標上的forEach ... – ericsoco

回答

2

MongoDB Docs on db.eval()

「db.eval()用於評估在數據庫服務器功能(使用JavaScript編寫的) 如果你需要觸摸大量的數據輕易這是有用的。那種情況下,數據的網絡傳輸可能是一個瓶頸。「

該文檔有一個如何使用它的例子,它與你正在做的事情非常相似。

+0

沒錯,正如我在上面的評論中所寫的,它看起來像db.eval()是一種可能性,但它阻塞了。沒有提到我不想阻止... – ericsoco

1

forEach是您最佳的選擇。我會在服務器上運行它(從shell)以減少延遲。

相關問題