使用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】:

limitDBCursor的方法: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驱动程序时如何限制结果数?的主要内容,如果未能解决你的问题,请参考以下文章

《MongoDB入门教程》第13篇 限制返回结果数量

《MongoDB入门教程》第13篇 限制返回结果数量

限制 MongoDB 中的查询结果

限制MongoDB使用的内存

java - 如何在java中查询mongoDb时使用Criteria all?

PHP MongoDB 驱动程序的游标如何缓冲结果集?