QueryFailure标志无法在缓存中找到游标

时间:2014-09-08 14:25:50

标签: mongodb mongodb-.net-driver mongodb-query

我在列出MyCollection所有文档时遇到以下错误:

  

MongoDB.Driver.MongoQueryException:QueryFailure标志不能   在MyCollection上找到id为5389104123286064734的缓存中的游标   (响应是{" $ err":"无法在缓存中找到id的光标   5389104123286064734 over Collection MyCollection"," code" :16336})

MyCollection拥有大约24000个文档,我使用MongoDB驱动程序进行C#

注意:我有时会遇到这种情况,我再次做了同样的动作并且反应正常!!

请您解释一下这个错误,可能的原因是什么,如何避免?

非常感谢。

1 个答案:

答案 0 :(得分:3)

错误表示服务器上不存在游标。这可能有几个原因。

背景:mongodb使用游标和游标ID来跟踪您在结果集中的位置。它不会立即为您的查询流式传输所有文档,而是分批发送它们。迭代完整批次后,驱动程序将发回OP_GETMORE以获取下一批次。

可能的问题:

  1. 您需要花费10多分钟来迭代单个批次的结果。 10分钟后游标超时。解决此问题的最佳方法是指定较小的批量大小,即每批20个文档。

  2. 您在不使用ip affinity的负载均衡器后面击中了mongos。如果负载均衡器在与原始查询不同的连接上收到OP_GETMORE请求,则它可能会将OP_GETMORE发送到其他服务器。