カーソルへの不正なアクセスや応答を受け取る際のエラーが原因です。
応答を受け取る際にエラーがあった場合は、より詳細なエラーメッセージが得られます。 問題の原因を調べるために役立つでしょう。 エラーメッセージをプログラム上で読み取るのは少し面倒なので、 例外の個々の要因に対してエラーコードも割り当てられています。
cannot modify cursor after beginning iteration
コード: 0
クエリを実行した後で、クエリの設定を変えるメソッドをコールしました。 いったんカーソルをリセットしてからやりなおしてください。
Get next batch send errors
コード: 1
クエリをデータベースに送信できませんでした。 データベースが立ち上がっていることとネットワークが正常であることを確認してください。
cursor not found
コード: 2
ドライバがデータベースから結果を取得しようとしましたが、 データベース側にクエリが残っていませんでした。 たいていは、カーソルがサーバ側でタイムアウトしたことを意味します。 やりとりがない状況が数秒続くと、データベースはカーソルを消します (これを防ぐための方法は MongoCursor::immortal() を参照ください)。
Couldn't get response header.
コード: 4
cursor->buf.pos is null
コード: 3
これは、ドライバの空間から外れてしまったか、 その他の異常な状況になったことを意味します。
couldn't get response header
コード: 4
ドライバがデータベースからのリプライヘッダを取得できず、取得をあきらめました。 データベースが立ち上がっていることとネットワークがつながっていることを確認し、 もう一度クエリを実行してみましょう。
no db response
コード: 5
これはエラーではないかもしれません。たとえば、データベースの "shutdown" コマンドは何も応答を返しません。 しかし、もし何らかの応答を得ることを期待していたのにこのエラーになったのなら、 データベースがその応答を返さなかったことを意味します。
bad response length: %d, max: %d, did the db assert?
コード: 6
これは、データベースの応答が 4MB を超えるかあるいは 0 未満であることを意味します。 5MB を超えるような値が返ってくるようなら、データベースのバグである可能性があります (応答の最大長は 4MB です)。開発者に報告しましょう。 0 未満の応答は、たいていデータベースのアサーションが発生したことを意味します。
incomplete header
コード: 7
めったにありませんが、 データベースの応答が正常にはじまったけれど途中で終わってしまった場合に発生します。 おそらくネットワークの問題でしょう。
incomplete response
コード: 8
めったにありませんが、 データベースの応答が正常にはじまったけれど途中で終わってしまった場合に発生します。 おそらくネットワークの問題でしょう。
couldn't find a response
コード: 9
キャッシュされていたレスポンスが見つけられませんでした。
error getting socket
コード: 10
ソケットが閉じられたか、エラーが発生しました。 ドライバは、(もし可能なら) 次の操作時に自動的に再接続しなければなりません。
couldn't find reply, please try again
コード: 11
ドライバは、リクエストに直接はマッチしないデータベースからの応答を保存します。 この例外が発生するのは、ドライバがすでにリクエストに対する応答を返した後で、 キャッシュ内に応答を見つけられなかったときです。
error getting database response: errstr
WSA error getting database response: errstr
"errstr" は、C のソケットから直接返ってきた入出力エラーです。 Windows では、エラーメッセージの先頭に "WSA" がつきます。
Timeout error
コード: 13
クエリが完了するのを待つ間に何かエラーが発生しました。
couldn't send query: <various>
コード: 14
送信時に C のソケットエラーが発生しました。
クエリの実行時に発生したデータベースのエラーは、常に MongoCursorExceptions を発生させなければなりません。 エラーメッセージとエラーコードはデータベースから直接送られるので、 対応するエラーをデータベースのログから見つけることができます。
一般的なデータベースエラーをいくつかまとめました。
E11000 duplicate key error index: foo.bar.$X dup key: { /* ... */ }
コード: 11000
キーが重複しているときのデータベースエラーです。
not master
コード: 10107, 13435 および 10058
マスタではないというエラーで、データベースから送られてきます。 これらのエラーが発生するとドライバは接続を切断し、 新しいマスタを探します。フェイルオーバーの際に実際に取得するエラーは "not master" ではないかもしれません。 これは、マスタの変更がいつ発生したのかに依存します。