代码:
try {
$documentsFind = $client->$db->$collection->find([
// query
]);
if ($documentsFind) {
foreach ($documentsFind as $product) {
// code...
}
}
catch (MongoCursorException $e) {
echo "error message: ".$e->getMessage()."\n";
echo "error code: ".$e->getCode()."\n";
}
错误:
致命错误:未捕获的MongoDB \ Driver \ Exception \ RuntimeException: 找不到光标,光标id:31837896248 in ...
似乎光标确实存在但是超时?我该如何防止这种情况发生?
编辑添加:我尝试过:
if ($documentsFind) {
$documentsFind->immortal(true); // keep alive
foreach ($documentsFind as $product) {
// code...
}
}
但这导致Call to undefined method MongoDB\Driver\Cursor::immortal()
。
答案 0 :(得分:6)
尝试这样查询:
$documentsFind = $client->$db->$collection->find([
// query
], ['noCursorTimeout' => true]);
find()
方法将第二个参数传递给Find
类构造函数,因此您可以看到所有可用选项here
答案 1 :(得分:0)
驱动程序试图从数据库中获取更多结果,但数据库没有查询记录。这通常意味着光标在服务器端超时:在几分钟不活动后,数据库将终止光标。
MongoDB PHP驱动程序有两种不同的超时: