我有 2 个集合:A(3.8M 文档)和 B(1.7M 文档)
我有一个从 shell 运行的 PHP 脚本:
一旦 a 中所有文档的循环完成:
4) 循环遍历 php 数组
5) 插入集合 C
在 (1) 期间,我一直得到:PHP fatal error :未捕获的异常 'MongoCursorException' 带有消息 'Cursor not found' 最后处理的项目是 3872494 中的 #8187。
real 1m25.478s
user 0m0.076s
sys 0m0.064s
再次运行它,代码没有变化,异常在项目 #19826/3872495 处引发
real 3m19.144s
user 0m0.120s
sys 0m0.072s
再说一遍,#8181/387249
real 1m31.110s
user 0m0.036s
sys 0m0.048s
是的,我意识到我可以(并且可能应该)捕获异常......但是......为什么它甚至被抛出?尤其是在数据库中经过如此不同的时间/深度时。
如果有帮助,我的设置是一个 3 节点副本集 (2+arb)。我使辅助设备脱机并尝试仅运行主设备。相同的结果(处理的结果数量和次数不同,但总是抛出 Cursor Not Found 异常)。
最佳答案
Yes, I realize that I can (and probably should) catch the exception...
是的,这绝对是第一件事。发生异常有几十个正当理由?当主节点离线并且无法访问时,您认为会发生什么?
... why is it even being thrown?
有几个潜在的原因,但让我们直接切入您看到的错误代码。
MongoDB PHP 驱动程序有两种不同的超时:
您遇到了光标超时。您可以连接到数据库,但您的查询“超时”。
可能的修复:
_ids
,处理它们,然后标记你已经这样做了。然后得到比上次运行大的下 1000 个 _ids
,依此类推。我会建议 #2 以及处理异常。即使这些不能完全解决问题,它也会帮助您隔离和缓解问题。
关于php - MongoDB - PHP - MongoCursorException 'Cursor not found',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6805469/
相关文章:
java - 如何在 Morphia/MongoDB Java 中创建复合唯一索引?
mongodb - Mongotemplate - 根据大于(gt)或小于(lt)运算符查询Obje
c# - 从 2.0 MongoDb c# 驱动程序获取结果
node.js - Mongoose 得到 `TypeError: user.save is not
sql - rails : mixing NOSQL & SQL Databases
node.js - Mongoose 更新 : $inc is not working in ups
c# - 如何使用 c# 驱动程序删除 mongodb 文档中的嵌套数组元素