MongoDB:Query有隐式限制(256)?

时间:2016-07-28 23:01:29

标签: java mongodb clojure

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

注意:

  • 这不是上限集合。
  • 在本地,我正在运行3.2.5,远程MongoDB版本是2.4.12
  • 我没有使用limit参数。当我使用它时,我可以限制本地服务器和部署服务器,但部署服务器仍然不会返回超过256条记录。
  • 从服务器获取的数据量小于500K。没什么大不了的。
  • 代码在Clojure中,使用Monger,它本身只调用Java com.mongodb。
    • 我可以使用Robomongo从远程服务器获取超过256条记录,虽然我不知道它是如何做到的,因为我无法从命令行连接到远程(auth使用相同的凭据失败,所以我'猜测版本不兼容)。

感谢任何帮助。

UPDATE:找到触发问题的东西:当我对输出进行排序时,它会将输出减少到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))

1 个答案:

答案 0 :(得分: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