在流星服務器端方法,我注入globalPositions
對象與key=_id
& value=number
更新Tasks
集合中的所有文檔。蒙戈 - 更新集合中的每個文件從一個對象
globalPositions // {id1: x, id2: y, id3: z…}
如何使在一個時間上的集合中的每個文件,這樣就
Tasks.update({_id: id1}, {$set: {gridIndex: x}});
編輯
我找到了一種方法的更新,但對於他的速度和別出心裁?該物體可能是相當大的..
Object.keys(globalPositions).map(function(key, index) {
var value = globalPositions[key];
Tasks.update({_id: key}, {$set: {gridIndex: value}});
});
你基本上正在做一個從'globalPositions'到'Tasks'的副本。你的循環更新是正確的,並且沒有一個批量的方法來做這個afaik,因爲每個文檔都會收到一個唯一的值。您還必須考慮如果在此批量更新過程中服務器崩潰會發生什麼情況,因爲您不知道從哪裏離開。 「globalPositions」如何填充? –
@MichelFloyd'globalPositions'從特定客戶端事件的新對象索引(網格中任務的重新排序)一次性填充。然後通過方法調用將其發送到服務器。我完全不知道在更新過程中服務器崩潰的問題:你能告訴我更多嗎? – Ontokrat
Mongo可能*不會在大型更新中崩潰,但除非'gridIndex'在更新之前爲null,否則您將不知道哪些已經被更新。實際上,[bulk.execute](https://docs.mongodb.com/manual/reference/method/Bulk.execute/#Bulk.execute)在您的上下文中可能很有用。這允許您基本上排隊所有更新,然後批量執行它們。 –