2015-06-17 4 views
2

У меня эта ошибка возникает, когда я пытаюсь извлечь тысячи документов из коллекции.MongoDB. Индекс был за пределами допустимого диапазона

index was out of range. must be non-negative and less than the size of the collection. parameter : Index 

Вот мой код, как я запрашиваю документы:

 MongoCollection<Book> collection = PDatabase.GetCollection<Book>("books"); 
     List<IProduct> products = new List<IProduct>(); 
     var books = collection.Find(Query.GT("stock", 0)).SetFlags(QueryFlags.NoCursorTimeout); 
     foreach (var book in books) 
     { 
      try 
      { 
       products.Add(book); 
      } 
      catch (Exception ex) { Console.WriteLine(ex.Message); } 
     } 
     return products; 

Когда я смотрел на сообщение об исключении, он говорит: «Индекс находился вне диапазона должен быть неотрицательным и меньше. размер коллекции. Индекс «

+0

что делает 'collection.Find' вернуться? –

+0

У меня есть класс «Книга», который я использовал для инициализации MongoCollection. Итак .find вернет список «Книга». И «Книга» реализует мой интерфейс «IProduct» –

+0

'PDatabase.GetCollection (« books »)' перенастраивает что-либо? Очевидно, 'products' недопустимо в контексте –

ответ

0

Вы упомянули в комментариях, что основной проблемой является исключение OutOfMemoryException.

Ответ здесь предполагает пейджинговой лучшие практики MongoDB - paging

+0

Я не использую пейджинг. Я уверен, что ошибка связана с размером списка , который составляет миллионы, так как мои документы составляют более 6 миллионов. –

+0

Я предлагаю пейджинг, может принести вам пользу. Что вы надеетесь сделать с 6 миллионами документов? – obaylis

+0

Спасибо, я решил это с помощью пропусков и ограничений. Таким образом, не все документы загружаются в один запрос. –

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