2

デフォルトのサイズが 50M の上限付きコレクションを作成しました。最近になって、Cursor not foundコレクションのストレージ サイズの上限が 50M を超えると、エラーが発生することに気付きました。これがどのような理由で発生するのかはわかりません。上限が設定されたコレクションのサイズがデフォルトの最大サイズを下回ったときに、このエラーが発生することはありませんでした。

if (this._cursor == null || this._cursor.IsDead)
{                 
   var cursor = this._queueCollection.Find(Query.GT("_id", this._lastId))
            .SetFlags(QueryFlags.AwaitData |
            QueryFlags.TailableCursor |
            QueryFlags.NoCursorTimeout)
            .SetSortOrder(SortBy.Ascending("$natural")); 
    this._cursor =(MongoCursorEnumerator<QueueMessage<T>>)cursor.GetEnumerator();
}

try
{
    if (this._cursor.MoveNext())
        //do some things
        return this._cursor.Current;
    else
     {
         if (this._cursor.IsDead){
               this._cursor.Dispose();
               this._cursor=null;
         }
     }
     return null;
}
catch{}

this._cursor.MoveNext ()は例外をスローしcursor not foundます (常にスローされるとは限りません。私のコードは間違っていますか?

4

2 に答える 2

2

このエラーの原因がわかりました。

Tailable カーソルは、次のいずれかの場合にデッドまたは無効になる可能性があります。

  1. クエリは一致を返しません。
  2. カーソルはコレクションの「最後」にあるドキュメントを返し、アプリケーションはそれらのドキュメントを削除します。

テーラブルカーソルの作成に関するmongodb公式Webサイトからの参照(http://docs.mongodb.org/manual/tutorial/create-tailable-cursor/

私のアプリケーションでは、'cursor not found' 例外がスローされるのは常に、カーソルがコレクションの「最後」にあるドキュメントを返し、アプリケーションがそれらのドキュメントを削除するためです。

于 2013-05-27T02:58:11.910 に答える