Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb QueryFailure标志在缓存中找不到游标_Mongodb_Mongodb .net Driver_Mongodb Query - Fatal编程技术网

Mongodb QueryFailure标志在缓存中找不到游标

Mongodb QueryFailure标志在缓存中找不到游标,mongodb,mongodb-.net-driver,mongodb-query,Mongodb,Mongodb .net Driver,Mongodb Query,我在列出MyCollection所有文档时出现以下错误: MongoDB.Driver.MongoQueryException:无法设置QueryFailure标志 在MyCollection上的缓存中查找id为5389104123286064734的游标 (响应为{“$err”:“在缓存中找不到id的游标。” 5389104123286064734超过集合“我的集合”,“代码”:16336}) MyCollection包含大约24000个文档,我正在使用MongoDB驱动程序进行C# 注意:我

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

MongoDB.Driver.MongoQueryException:无法设置QueryFailure标志 在MyCollection上的缓存中查找id为5389104123286064734的游标 (响应为{“$err”:“在缓存中找不到id的游标。” 5389104123286064734超过集合“我的集合”,“代码”:16336})

MyCollection包含大约24000个文档,我正在使用MongoDB驱动程序进行C#

注意:我有时会遇到这种异常,我再次执行了相同的操作,它会正确响应

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


非常感谢。

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

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

可能的问题:

  • 迭代单个批次的结果需要10分钟以上的时间。游标在10分钟后超时。解决这个问题的最佳方法是指定一个较小的批大小,比如说每批20个文档

  • 您使用的是不使用ip关联的负载平衡器后面的mongos。如果负载平衡器在与原始查询不同的连接上接收到OP_GETMORE请求,那么它可能会将OP_GETMORE发送到不同的服务器


  • 您也可以增加(或禁用)超时,不是吗?谢谢您的回复。我尝试了第一种解决方案,将批量大小设置为50,但它给出了相同的错误,然后我尝试了20,这需要太多的时间来响应!我不确定第二种情况是否是原因,你知道如何处理它吗?@I3arnon我试图为游标禁用超时,但我想知道增加/禁用游标超时是否有任何缺点?不幸的是,10分钟超时是不可配置的。要么10分钟,要么根本没有超时。这就是为什么减少批量大小实际上是一回事;返回次数越少,客户端迭代速度越快,向服务器发送getmore的速度越快,刷新超时的速度越快。我不确定为什么较低的批量需要更长的时间才能响应-这没有意义。顺便说一句:你是在为你的查询创建索引吗?我的解决方案是在我排序的列中添加一个索引。