我有一个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