我在列出MyCollection
所有文档时遇到以下错误:
MongoDB.Driver.MongoQueryException:QueryFailure标志不能 在MyCollection上找到id为5389104123286064734的缓存中的游标 (响应是{" $ err":"无法在缓存中找到id的光标 5389104123286064734 over Collection MyCollection"," code" :16336})
MyCollection拥有大约24000个文档,我使用MongoDB驱动程序进行C#
注意:我有时会遇到这种情况,我再次做了同样的动作并且反应正常!!
请您解释一下这个错误,可能的原因是什么,如何避免?
非常感谢。
答案 0 :(得分:3)
错误表示服务器上不存在游标。这可能有几个原因。
背景:mongodb使用游标和游标ID来跟踪您在结果集中的位置。它不会立即为您的查询流式传输所有文档,而是分批发送它们。迭代完整批次后,驱动程序将发回OP_GETMORE以获取下一批次。
可能的问题:
您需要花费10多分钟来迭代单个批次的结果。 10分钟后游标超时。解决此问题的最佳方法是指定较小的批量大小,即每批20个文档。
您在不使用ip affinity的负载均衡器后面击中了mongos。如果负载均衡器在与原始查询不同的连接上收到OP_GETMORE请求,则它可能会将OP_GETMORE发送到其他服务器。