[MongoDB] Error: getMore: cursor didn’t exist on server, possible restart or timeout? の解決方法

MongoDB のクエリで Error: getMore: cursor didn’t exist on server, possible restart or timeout? が発生したときの解決方法をご紹介します。

MongoDB | モンゴディービー

MongoDB クエリのパフォーマンスチューニング

そもそも timeout が発生するのは、MongoDB クエリの実行時間が長いのが原因です。

チェック項目

  • field に index が定義されているか?
  • 富豪的な全件走査 (loop 処理) していないか?

など、クエリの実行時間が長く掛かっている点をチェックして、改善しましょう。

noTimeout オプションを指定する

MongoDB クエリのパフォーマンスチューニングしても timeout エラーが解決しない場合、cursor.addOption() で noTimeout オプションを指定して、タイムアウトを無効に設定しましょう。

db.collection.find().addOption(DBQuery.Option.noTimeout)

以上、MongoDB のクエリが timeout して困った現場からお送りしました。

参考情報