使用mongodb的Java驱动程序时如何限制结果数?
Posted
技术标签:
【中文标题】使用mongodb的Java驱动程序时如何限制结果数?【英文标题】:How do I limit the number of results when using the Java driver for mongo db? 【发布时间】:2011-04-05 01:47:02 【问题描述】:http://api.mongodb.org/java/2.1/com/mongodb/DBCollection.html#find(com.mongodb.DBObject,com.mongodb.DBObject,int,int)
将它与 Grails 和 mongo db 插件一起使用。
这是我正在使用的代码...不知道为什么,但光标正在返回整个数据集。在这种情况下,我只是想返回前 20 个匹配项(is_processed = false):
def limit =
def count = 1;
def shape_cursor = mongo.shapes.find(new BasicDBObject("is_processed", false),new BasicDBObject(),0,20);
while(shape_cursor.hasNext())
shape_cursor.next();
render "<div>" + count + "</div"
count++;
有人有想法吗?
【问题讨论】:
【参考方案1】:limit
是DBCursor
的方法:DBCursor.limit(n)。
所以你只需要这样做
def shape_cursor = mongo.shapes.find(...).limit(20);
【讨论】:
由于最后没有.execute()
或任何东西,乍一看,这看起来像limit(20)
在查询本身完成后 可供Mongo 使用。 ..我认为这对性能没有重大影响? limit(...)
是严格意义上的客户端吗?【参考方案2】:
根据您链接到第二个 int 参数的 JavaDoc 不是要返回的最大数量,而是
batchSize - 如果为正,则为从数据库发回的每批对象的数量。将返回所有匹配的对象。如果 batchSize
也许一个负数 (-20) 可以满足您的要求,但我发现上面的陈述太令人困惑而无法确定,因此我将 batchSize 设置为 20,然后在您的应用程序代码中进行过滤。
也许将此作为错误/功能请求提交。应该有一种方法来指定跳过/限制,就像在 shell 界面上一样。 (更新:在游标类上,请参阅其他答案)。
【讨论】:
以上是关于使用mongodb的Java驱动程序时如何限制结果数?的主要内容,如果未能解决你的问题,请参考以下文章