2012-12-27 24 views
5

Ho un'operazione abbastanza intensiva che ha un MongoCursor eseguito in un ciclo per alcune ore (su un'app di vb.net in esecuzione tramite il driver C#. Non sono sicuro di quali siano le cause ma mi imbatto in un'eccezione dopo un po 'MongoDB C# Driver 'Cursore non trovato'

Cursor not found 

Questo potrebbe essere a causa di un timeout del cursore, forse? c'è un modo per evitare che si verifichi? Se il suo un problema di timeout come posso collocare un timeout più lungo ?

risposta

13

È possibile disattivare il timeout del cursore nel driver C# chiamando:

cursor.SetFlags(QueryFlags.NoCursorTimeout); 

Altrimenti verrà chiuso dopo 10 minuti di inattività.

Reference

+1

Se non si esaurisce il cursore sull'ultimo elemento, ciò causerà una perdita di memoria in mongo. – Nashenas

+0

Puoi anche modificare la dimensione del batch (come per http://stackoverflow.com/a/24200795/420867 - è una domanda python ma lo stesso dovrebbe essere possibile con il driver C# mongo) – drevicko

2

Ulteriori chiarire la risposta di JohnnyHK, questa è la sintassi:

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

sto usando MongoDB.Driver versione 2.4.4 e IFindFluent non è contenente SetFlags metodo. utilizzando invece:

cursor.Options.NoCursorTimeout = true; 
Problemi correlati