2016-04-03 7 views
4

のためのバッチサイズを設定する方法2.2.3私は、私はC#のドライバを使用してカーソルのバッチサイズを設定することができますどのようにMongoDB 2.2.3C#のMongoDBのドライバはカーソル

の公式C#のドライバを使用していますか?

私はそれのためのカーソルと設定バッチサイズを作成することができますJavaScriptで:

var cursor = db.statistics.find(query).batchSize(100) 

と私は、次のステートメントを使用して、すべての項目を反復処理することができます

while(cursor.objsLeftInBatch()>0){ 
    var doc = cursor.next(); 
    //process doc 
} 

私が持っているしたいと思います非同期/サポート待ちのC#と同じ動作。 私はC#からカーソルを使用できることを知っていますが、デフォルトのバッチサイズは4MBです。 これは1回の呼び出しでクライアントに戻るには一致しません。

+0

のMongoDBレガシーAPIはありませんバッチサイズを制御するメソッドを提供しますが、私は最新のAPIについてはわかりません。 http://api.mongodb.org/csharp/current/html/P_MongoDB_Driver_MongoCursor_BatchSize.htm – Saleem

答えて

4

FindOptionsパラメータのバッチサイズをFindAsyncに設定できます。

ここで明示的にバッチを処理するための基本的なパターンがあります:

var filter = new BsonDocument(); 
var options = new FindOptions<BsonDocument> 
{ 
    // Get 100 docs at a time 
    BatchSize = 100 
}; 

using (var cursor = await test.FindAsync(filter, options)) 
{ 
    // Move to the next batch of docs 
    while (await cursor.MoveNextAsync()) 
    { 
     var batch = cursor.Current; 
     foreach (var doc in batch) 
     { 
      // process doc 
     } 
    } 
} 

しかし、あなたはまた、カーソルの上にForEachAsyncを呼び出すことができますし、バッチがオンデマンドで透過的にフェッチされます:

using (var cursor = await test.FindAsync(filter, options)) 
{ 
    await cursor.ForEachAsync(doc => 
    { 
     // process doc 
    }); 
} 
+0

ありがとうJonyHK、プロフィールでチェックしたところ、すべて正常に動作します。 – denisvlah

関連する問題