【问题标题】:MongoDB: Query has implicit limit(256)?MongoDB:查询有隐式限制(256)?
【发布时间】:2016-07-28 23:01:29
【问题描述】:

我已经(在代码中)在 MongoDB 中创建了一个默认集合并正在查询它,并发现当我在本地运行代码时会返回所有数据,而在部署中查询它时不会返回服务器。它最多返回 256 条记录。

注意事项:

  • 这不是一个有上限的集合。
  • 本地,我运行的是3.2.5,远程的MongoDB版本是2.4.12
  • 我没有使用限制参数。当我使用它时,我可以同时限制本地和部署服务器,但部署服务器仍然不会返回超过 256 条记录。
  • 从服务器获取的数据量
  • 代码在 Clojure 中,使用 Monger,它本身只是调用 Java com.mongodb 的东西。
    • 我可以使用 Robomongo 从远程服务器中提取超过 256 条记录,但我不确定它是如何做到的,因为我无法从命令行连接到远程(使用相同的凭据验证失败,所以我我在那儿猜测版本不兼容)。

感谢任何帮助。

更新:找到触发问题的东西:当我对输出进行排序时,它会将输出减少到 256——但只有当我从 Mongo 2.4 中提取时!我不知道这是 MongoDB 本身、MongoDB java 类还是 Monger,但这里是说明问题的代码,尽可能简单:

(ns mdbtest.core
  (:require [monger.core :as mg]
            [monger.query :as mq]))

(defn get-list []
  (let [coll (mq/with-collection
               (mg/get-db
                 (mg/connect {:host "old-mongo"}) "mydb") "saves"
               (mq/sort (array-map :createdDate -1)))]   ;;<<==remove sort
    coll))

【问题讨论】:

  • 您能否分享一些代码,以便我们自己重现该问题?
  • 呜呜呜。就是这样。
  • 我在带有 clojure 和 monger 的 MongoDB 2.4 实例上看到了这一点。但是在同一个实例上,mongo 命令行似乎工作正常:db.photos.find( { keywords: "lisa" }).sort( { datetime: 1} ).count()688

标签: java mongodb clojure


【解决方案1】:

您需要指定更大的批处理大小,默认为 256 条记录。

这是我自己的代码中的一个示例:

=> (count (with-db (q/find {:keywords "lisa"}) 
                  (q/sort {:datetime 1}) ))
256

=> (count (with-db (q/find {:keywords "lisa"}) 
                  (q/sort {:datetime 1}) 
                  (q/batch-size 1000) ))
688

在此处查看更多信息:http://clojuremongodb.info/articles/querying.html#setting_batch_size

【讨论】:

  • 如果我回来验证这一点(问题出现的时间还不到 2 年前),我会给你做绿色检查。 =P
  • 很公平 :) 顺便说一句,我只在 Raspberry Pi 上的 2.4 上看到它。
猜你喜欢
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 2011-06-18
  • 1970-01-01
  • 2022-09-28
  • 2014-08-12
  • 2013-04-06
  • 1970-01-01
相关资源
最近更新 更多