使用mongo db的Java驱动程序时,如何限制结果的数量?

使用mongo db的Java驱动程序时,如何限制结果的数量?,java,grails,groovy,mongodb,Java,Grails,Groovy,Mongodb,将其与Grails和mongo db插件一起使用 这是我正在使用的代码。。。不确定原因,但光标返回的是整个数据集。在本例中,我只是尝试返回前20个匹配项(is_processed=false): def限制={ def计数=1; def shape_cursor=mongo.shapes.find(新BasicDBObject(“已处理”,false),新BasicDBObject(),0,20); while(shape_cursor.hasNext()){ shape_cursor.next

将其与Grails和mongo db插件一起使用

这是我正在使用的代码。。。不确定原因,但光标返回的是整个数据集。在本例中,我只是尝试返回前20个匹配项(is_processed=false):

def限制={
def计数=1;
def shape_cursor=mongo.shapes.find(新BasicDBObject(“已处理”,false),新BasicDBObject(),0,20);
while(shape_cursor.hasNext()){
shape_cursor.next();

根据链接到第二个int参数的JavaDoc,render“+count+”不是要返回的最大数,而是

batchSize-如果为正,则为从db返回的每个批次的对象数。将返回所有匹配的对象。如果batchSize<0,则为硬限制,并且只有一个批次将为batchSize或适合于一个批次的对象数

也许负数(-20)可以满足您的要求,但我发现上面的语句太混乱,无法确定,因此我将batchSize设置为20,然后在应用程序代码中进行筛选


可能将其作为bug/feature请求归档。应该有一种方法来指定skip/limit,其工作原理与shell接口类似。(更新:cursor类上有,请参见另一个答案)。

limit
DBCursor
的一种方法

所以你只需要做

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

由于最后没有
.execute()
或任何东西,在第一次阅读时,这看起来像是
限制(20)
在查询本身完成后对Mongo可用…我假设这没有主要的性能影响?是否
限制(…)
完全是客户端的?
def shape_cursor = mongo.shapes.find(...).limit(20);