2010-12-17 66 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您是否試圖將限制直接設置爲例如300萬?

3你是否還試圖獲取數據的部分數據,例如一半的百萬,因爲mb在mongodb或驅動程序有一些超時?

4關於cuncurrency at mongo db。

希望得到這個幫助。

+0

我相信在這種情況下計數實際上並不是Linq方法,因爲計數是瞬時的。如果實際上將所有記錄反序列化,則需要更長的時間。我從mongoCollection.Count()獲得的結果與從mongo shell進行計數查詢時的結果相同。我也嘗試了設置批量大小,我得到了同樣的結果。 – jWoose 2010-12-17 15:37:17

+0

是的,關於你是對的,我只是沒有準確地讀你的代碼。 – 2010-12-17 16:34:44

+0

您是否知道mongo是否鎖定寫入記錄以防止光標檢索它們? – jWoose 2010-12-17 20:44:23

相關問題