我有一个MongoDB查询,它可以获取大约50000个大文档。
这对我的内存来说太多了,所以计算机速度变慢了。
现在我想对mongodb结果进行分块迭代。
我想取前1000个文档并处理它们,然后取下1000个,依此类推。
这是处理大量数据的最佳方法吗?还是我应该一个接一个的?
我尝试了以下方法:

MongoCursor<MyDocument> items = collection.Find(query);
long count = items.Count();
int stepSize = 1000;

for (int i = 0; i < Math.Ceiling((double)count / stepSize); i++)
{
    List<MyDocument> list = items.SetSkip(i * stepSize).SetLimit(stepSize).ToList();
    // process the 1000 ...
}

但这个密码不起作用。我得到以下错误:
MongoCursor对象一旦冻结就不能修改。
如何解决这个问题?

最佳答案

你可以用这种方法

        var count = collection.Find(new BsonDocument()).Count();
        var stepSize = 1000;

        for (int i = 0; i < Math.Ceiling((double)count / stepSize); i++)
        {
            // put your query here      \/\/\/\/\/\/
            var list = collection.Find(new BsonDocument()).Skip(i * stepSize).Limit(stepSize).ToList();
            // process the 1000 ...
        }

因为你有兴趣得到和处理
驱动器2.2.4

09-04 00:41