12

Railsアプリにmongoクエリがありますが、コレクションが膨大なためタイムアウトになっています。

FbCheckin.where(ext_fb_place_id: self.ext_fb_place_id).all

timeout次のメッセージでカーソルがタイムアウトしないようにするオプションを追加できることをドキュメントから読みました。

Moped::Errors::CursorNotFound: The operation: "GET MORE" failed with error

私は以下を含むいくつかの方法を試しました

FbCheckin.where(ext_fb_place_id: ext_fb_place_id, {:timeout=>false}).all

FbCheckin.find(ext_fb_place_id: ext_fb_place_id, {:timeout=>false}).all

しかし、これらのどれもカーソルがタイムアウトするのを妨げません。

FbCheckinsカーソルが事前にタイムアウトすることなく、このクエリを作成してすべてを収集する方法を知っている人はいますか?

ありがとう

4

3 に答える 3

2

Mongo Ruby ドライバーを使用しているときに、検索クエリと共に「no_cursor_timeout」オプションを使用します。

これにより、すべてのカーソル タイムアウトが無効になります。デフォルトでは、MongoDB は 10 分以上非アクティブだったすべてのカーソルを強制終了しようとします。

詳細については、こちらをご覧ください

于 2017-02-23T13:13:42.150 に答える
-3

mongoidはデフォルトで長時間のクエリを強制終了し、このエラーを発生させます

このエラーを回避するために、mongoid.ymlのraise_not_found_errorオプションを変更できます

例えば:

production:
  sessions:
   default:
     database: local
     hosts:
      - localhost:27017
     options:
       allow_dynamic_fields: true
       raise_not_found_error: false
于 2013-03-04T05:18:38.760 に答える