2012-12-27 85 views
5

我有一個相當密集的操作,有一個MongoCursor循環運行幾個小時(在通過c#驅動程序運行的vb.net應用程序中,我不太確定是什麼原因它,但我碰到一個例外一段時間後,MongoDB C#驅動程序未找到光標'

Cursor not found 

這可能是因爲遊標超時,也許?有沒有一種辦法可以阻止它發生?如果超時問題我如何放置更長的超時?

回答

13

您可以通過調用以下命令禁用C#驅動程序中的光標超時:

cursor.SetFlags(QueryFlags.NoCursorTimeout); 

否則它將在閒置10分鐘後關閉。

Reference

+1

如果你沒有用盡光標到最後一個元素,這將導致在蒙戈內存泄漏。 – Nashenas

+0

您也可以更改批量大小(按照http://stackoverflow.com/a/24200795/420867-這是一個python問題,但C#mongo驅動程序也應該可以) – drevicko

2

進一步明確JohnnyHK的答案,這是語法:

MongoCursor<BsonDocument> cursor = myCollection 
            .Find(query) 
            .SetSortOrder(SortBy.Ascending("TrackingNumber")) 
            .SetFlags(QueryFlags.NoCursorTimeout); 
0

我使用MongoDB.Driver版本2.4.4和IFindFluent不包含SetFlags方法。用這個代替:

cursor.Options.NoCursorTimeout = true;