【发布时间】:2017-07-25 02:14:41
【问题描述】:
在 Meteor 服务器端方法中,我注入了一个带有 key=_id 和 value=number 的 globalPositions 对象,以更新 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。您的更新循环是正确的,并且没有大量方法可以执行此操作,因为每个文档都会收到唯一的值。您还必须考虑如果您的服务器在此批量更新过程中崩溃会发生什么,因为您不知道从哪里停下来。globalPositions是如何填充的? -
@MichelFloyd
globalPositions一次性填充,来自特定客户端事件的新对象索引(网格中任务的重新排序)。然后通过方法调用将其发送到服务器。我完全不知道更新过程中服务器崩溃的问题:你能告诉我更多吗? -
Mongo 可能不会在大更新中崩溃,但除非
gridIndex在更新前为空,否则您将不知道哪些已经更新.实际上,bulk.execute 在您的上下文中可能很有用。这使您基本上可以将所有更新排队,然后批量执行。