我有一个包含1亿份文件的藏品。我想安全地更新一些文件(安全地我的意思是仅在文档尚未更新时更新文档)。在Mongo中有一种有效的方法吗?
我打算使用带有限制条款的$ isolated运算符,但看起来mongo不支持限制更新。
这看起来很简单,但我被卡住了。任何帮助将不胜感激。
答案 0 :(得分:1)
Per Sammaye,看起来没有“适当”的方式来做到这一点。 我的解决方法是创建一个sequence as outlined on the mongo site,只需在我的集合中的每条记录中添加一个'seq'字段。现在我有一个可以可靠排序的唯一字段来更新。
可靠的可分类在这里很重要。我只是对自动生成的_id进行排序,但我很快意识到自然顺序与ObjectId的升序不同(来自this page它看起来像字符串值优先于匹配的对象值我在测试中观察到的行为)。此外,完全有可能将记录重新定位到磁盘上,这使得自然顺序不可靠进行排序。
所以现在我可以查询具有最小'seq'的记录,该记录尚未更新以获得包含起点。接下来,我查询'seq'大于我的起点并跳过的记录(重要的是跳过,因为如果你删除文件等'seq'可能很稀疏......等等)我想要更新的记录数。在该查询上设置限制为1,并且您有一个非包含端点。现在,我可以使用'updated'= 0,'seq'> =我的起点和<的查询发出更新。我的终点。假设没有其他线程可以击败我,更新应该给我我想要的东西。
以下是步骤:
非常痛苦,但它完成了工作。