使用mongodb的Java驱动程序时如何限制结果数?

时间:2010-08-28 00:37:01

标签: java grails groovy mongodb

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++;
    }
}

有人有想法吗?

2 个答案:

答案 0 :(得分:5)

limitDBCursor的一种方法:DBCursor.limit(n)

所以你只需要做

def shape_cursor = mongo.shapes.find(...).limit(20);

答案 1 :(得分:3)

根据JavaDoc,您链接到第二个int参数不是要返回的最大数,而是

  

batchSize - 如果是肯定的,则是从db发回的每批次的对象数。将返回匹配的所有对象。 if batchSize&lt; 0,它是一个硬限制,只有1批次将是batchSize或适合批次的#

也许负数(-20)会做你想要的,但是我发现上面的陈述太混乱而无法确定它,所以我将batchSize设置为20然后过滤你的应用程序代码。

可能将此文件作为错误/功能请求提交。应该有一种方法来指定跳过/限制,就像在shell接口上一样。 (更新:并且在光标类上有另一个答案)。