我正在 mongodb 中使用 java 对批量大小设置为 500 的集合执行查找查询。我的集合有 10,000 条记录,但设置批量大小时我只得到 1-500 条记录。如何获取下一组记录?
下面是代码片段
DBCursor cursor = collection.find(query).batchSize(batchSize);
while(cursor.hasNext()) {
// write to file.
DBObject obj = cursor.next();
objectIdList.add(obj.get("_id"));
}
The DBCursor
允许您迭代被认为与相关的文档集query
传递到find()
方法。它懒洋洋地从底层数据库中以块的形式获取这些文档批量大小.
因此,使用默认的批量大小(101,IIRC),它将返回前 101 个文档给您的客户端,然后当您的客户端代码迭代到第 101 个文档之外时,它将(在幕后)获取接下来的 101 个文档,依此类推,直到首先发生以下情况:
- 返回与您的查询相关的所有文档,即游标已耗尽
- 你的客户端停止迭代
当您设置显式时,这同样适用批量大小所以在你的情况下,当你设置时batchSize=500
, the find()
调用返回一个DBCursor
其中包含(最多)500 个文档,如果有超过 500 个文档与您的查询匹配,那么当您迭代超过第 500 个文档时,MongoDB Java 驱动程序将(在幕后)获取下一批。
你说...
我的集合有 10,000 条记录,但设置了批量大小后,我只得到 1-500 条记录
...如果您只获得 500 个文档,那么要么您在 500 个文档后停止迭代,要么只有 500 个文档被认为与您的相关query
.
您可以使用以下命令查看有多少文档与您的查询相关count()
方法。例如:
int count = collection.find(query).count();
您还可以获取与您的查询相关的所有文档一气呵成不使用DBCursor
像这样 ...
List<DBObject> obj = collection.find(query).toArray();
…当然,这可能会对您的应用程序的堆产生影响,因为它会导致每个符合您标准的文档都存储在客户端的堆上(而不是通过内存批量读取它们的更内存友好的方法)DBCursor
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)