我尝试为MongoDB尝试一个新项目。 以前从未使用过它。 游标手册上说:

由于游标在其生命周期内没有被隔离,因此对文档进行干预的写操作可能会导致游标返回一个文档(如果该文档已更改)不止一次。 要处理这种情况,请参阅有关快照模式的信息。

这意味着我必须始终在读取和/或$ isolated和写入操作上使用snapshot() ,以确保结果集一致,或者换句话说,要应用某种事务性。 这个对吗? 还是为什么我不应该使用snapshot(),因为不使用它会始终获得无关紧要的数据吗?

===============>>#1 票数:1 已采纳

在修改cursor本身的结果时,应使用snapshot() :在迭代cursor并修改迭代时修改文档,或者在调用集合时,希望在调用和游标本身的迭代之间进行修改。

如果您的光标结果大于1mb,也应该考虑使用snapshot 结果集小于1 MB的查询是默认快照

请注意,如果使用分片sharded collection ,则不能使用snapshot

  ask by Bevor translate from so

未解决问题?本站智能推荐:

1回复

mongoDB中的游标隔离

首先,请原谅我提出一个愚蠢的问题,但我是mongodb的新手并且学习游标。 我有一个问题,为什么我们需要光标隔离?。手册说“对文档进行干预写操作可能会导致光标在文档发生变化时多次返回文档。” 我无法理解这一点。 如果有人可以更多地发光或举一些例子,我会很高兴。
3回复

MongoDB中的事务

我正在使用带有Java和Spring Data的NoSQL数据库MongoDB。 我知道MongoDB仅支持单个文档的事务。 我正在使用Spring Transactions进行MongoDB事务。 我正在使用TransactionTemplate。 使用TransactionTem
1回复

如何打印mongodb游标?

我正在尝试将此集合的内容打印到在nodejs localhost服务器上运行的mongo数据库的控制台。 第一个和最后一个console.log显示正常,但光标本身不显示。 并且不会引发任何错误。 有任何想法吗? 以上是CoffeeScript。
1回复

MongoDB游标和内存

当我在php中使用mongo DB游标时: 那么,是否只有最后的$ Document保留在内存中,还是我必须从游标对象中删除生成的文档?
3回复

MongoDB中的游标是什么?

我们很困扰最终出现的cursor not found exceptions一些Morphia Queries asList cursor not found exceptions ,我发现了SO的提示 ,这可能是非常消耗内存的。 现在我想了解更多关于背景知识:可以用sombody解释(英文
1回复

对mongoDb游标进行排序

我很难为排序的游标找到正确的语法。 它需要做的是返回一个排序的游标,在处理完每个项目之后,我可以对其进行迭代。 这是我的函数,无需排序即可完美工作,但一旦添加sort() ,则什么也不返回(我强烈怀疑语法问题,但似乎找不到正确的文档):
1回复

串行迭代mongodb游标

我正在遍历一个集合,对于每个文档,我正在从scores数组中删除score最低的元素。 一些文档已更新,但在某些时候出现错误。 我可以理解,我在执行与db上的异步操作有关的错误操作,但是我无法找出确切的原因。 帮助将不胜感激。 谢谢 编辑:文档样本
1回复

mongoDB中的游标限制

我将mongo用作我的Web应用程序的数据库。 Java代码从mongo查询数据。 当前mongo中> 40000。 在我的一个api中,它将返回所有这些文档。 所以我只需要50个文档即可显示在网页上。 我已经尝试过cursor.limit(50)但是它只减少了while循环所花
1回复

从MongoDB迭代游标

我正在尝试获取馆藏中的所有文档,因此我可以根据它们做一些事情。 我正在使用以下代码: 并不断得到:对象5没有方法“每个” 此函数工作正常(相同的连接属性): 似乎每个函数都在最后一个对象上尝试过,但该最后一个对象不存在。 至少我这样看。 但是我可能完全错了。
2回复

MongoDB:处理游标

摘自C#驱动程序: It is important that a cursor cleanly release any resources it holds. The key to guaranteeing this is to make sure the Dispose method of