2014-01-30 1 views
1

Я пытаюсь сделать выбор в базе данных Монго Я использую эту DLLMongoDB C# Driver «Курсор не найден» с Linq запрос

MongoDB.Bson,MongoDB.Driver,MongoDB.Driver.Linq

Моя таблица имеет больше чем 55K строк

Через некоторое время эта ошибка возникает

Курсор не найден

Вот мой код

var client = new MongoClient(connectionString);   
var server = client.GetServer();   
var database = server.GetDatabase("Database"); 
var collection = database.GetCollection<DesktopSessions>("desktop_sessions"); 
var query = (from e in collection.AsQueryable<DesktopSessions>() 
      where e.created_at > new DateTime(2012, 7, 1) 
      select e); 
foreach (var item in query) 
{ 
    string id = item._id.ToString(); 
} 

Как я могу решить эту проблему?

+0

Если поставить новый DateTime() в переменную, затем запустить запрос, работает ли она лучше? – Matt

+0

сколько времени занимает некоторое время? вы могли бы достигнуть таймаута на курсоре – i3arnon

+0

@ I3arnon Тайм-аут по умолчанию для курсора составляет 10 минут. Если не установлен флаг noTimeout. –

ответ

2

Я изменил код для этого

var collection = database.GetCollection<DesktopSessions>("desktop_sessions"); 
var queryM = Query.GTE("created_at", new BsonDateTime(new DateTime(2012,7,1))); 
var cursor = collection.Find(queryM); 
cursor.SetFlags(QueryFlags.NoCursorTimeout); 

это работает !!

+1

Если вы не исчерпали курсор, сервер никогда не очистит его, и это будет утечка ресурсов, где ресурсы не будут очищены до тех пор, пока процесс mongod не будет перезапущен. Важно вывести курсор или найти способ сделать это без 'NoCursorTimeout'. –

0

Другой вариант - установить тайм-аут для всей базы данных, что я и делаю. Вы можете сделать это в конфигурации, командной строке, оболочке mongo или даже C#.

посмотреть здесь: https://jira.mongodb.org/browse/SERVER-8188

Это решение я использую в настоящее время в моем классе инициализации

var db = this.MongoClient.GetDatabase("admin"); 
var cmd = new BsonDocumentCommand<BsonDocument>(new BsonDocument { 
    { "setParameter", 1 }, 
    { "cursorTimeoutMillis", 3600000 } 
}); 
db.RunCommand(cmd); 

Более подробную информацию можно найти здесь: https://docs.mongodb.com/v3.0/reference/parameters/#param.cursorTimeoutMillis

 Смежные вопросы

  • Нет связанных вопросов^_^