2010-12-17 7 views
1

私はmongodb.orgの10gen c#MongoDBドライバを使用しています.2百万以上の行を持つコレクションからすべての行を取得しようとしています。MongoCursorがMongoCollectionからすべての結果を返さないのはなぜですか?

var mongoServer = dataHelper.GetMongoServer(); 
var mongoDatabase = mongoServer.GetDatabase("MyDB"); 
var mongoCollection = mongoDatabase.GetCollection<MyClass>("MyClass"); 
var mongoCount = mongoCollection.Count(); 
var mongoCursor = mongoCollection.FindAll(); 
mongoCursor.SetBatchSize(1000); 
var totalCount = 0; 

foreach(var myClass in mongoCursor) 
{ 
    ++totalCount; 
    //process record 
} 

foreach文が完了すると、totalCountはそのコレクションに含まれるmongoCountの約91%にすぎません。私のコードに何か問題がありますか?なぜなら、あなたの

答えて

1

1 Mbのあんたの問題は、バッチサイズを変更しましたか?デフォルトのバッチサイズは実際には4MBです。バッチサイズを設定せずに試してください。

2あなたは3百万人に例えば直接制限を設定しようとしていましたか?

3また、mongodbやドライバーでmbタイムアウトが発生することがあるため、半分のデータを取得しようとしましたか?

4についてcuncurrencyのmongoデシベルで。

このヘルプが必要です。カウントが瞬間的であるので、私はこのケースでカウント信じる

+0

は実際にLINQの方法ではありません。実際にすべてのレコードをデシリアライズしていた場合は、ずっと時間がかかります。 mongoCollection.Count()から得られる結果は、mongoシェルからcountクエリを実行したときと同じです。私はバッチサイズを設定しないで試してみましたが、同じ結果が得られました。 – jWoose

+0

はい、あなたが正しいと思っています。私はちょうどあなたのコードを正確には読んでいません。 –

+0

mongoが書き込みのレコードをロックすると、カーソルがそれらのレコードを取得できないことがわかりますか? – jWoose

関連する問題