【问题标题】:How do I limit the number of results when using the Java driver for mongo db?使用mongodb的Java驱动程序时如何限制结果数?
【发布时间】: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++;
    }
}

有人有想法吗?

【问题讨论】:

    标签: java grails groovy mongodb


    【解决方案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 界面上一样。 (更新:在游标类上,请参阅其他答案)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-13
      • 1970-01-01
      相关资源
      最近更新 更多