【问题标题】:MongoDB. Index was out of rangeMongoDB。指数超出范围
【发布时间】:2015-06-18 23:38:33
【问题描述】:

当我尝试从集合中检索数千个文档时,我一直遇到此错误。

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;

当我查看异常消息时,它说“索引超出范围。必须是非负数并且小于集合的大小。参数:索引”

【问题讨论】:

  • collection.Find 返回什么?
  • 我有一个“Book”类,我在初始化 MongoCollection 时使用它。所以 .find 将返回一个“书”列表。而“Book”实现了我的“IProduct”接口
  • PDatabase.GetCollection&lt;Book&gt;("books") retuns 什么?显然products 在上下文中无效
  • 我编辑了它。它的“书”,每本书都添加到 Iproduct 列表中。
  • 如果books 为空,则try 不应执行.. :(

标签: c# mongodb mongodb-.net-driver


【解决方案1】:

您在 cmets 中提到根本问题是 OutOfMemoryException。

此处的答案建议分页最佳实践MongoDB - paging

【讨论】:

  • 我不使用分页。我敢打赌,这个错误大约是 List 的大小,因为我的文档超过 600 万,所以它是数百万。
  • 我的意思是分页可能会让你受益。无论如何,您希望如何处理 600 万份文档?
  • 谢谢,我用skip和limit解决了。这样,并非所有文档都在一个查询中加载。
猜你喜欢
  • 2019-03-30
  • 2014-07-10
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 2011-01-17
  • 2015-01-09
  • 1970-01-01
相关资源
最近更新 更多