13

我在带有 mongoid 3.1.0 和最新 3.1.3 的 rails 中尝试了类似的方法。.limit 不起作用。在它下面应该返回 1 行,但它会返回所有 (4)

代码:

@go = Gallery.limit(1)
logger.info "count: #{@go.count}"

输出:

 count: 4
 MOPED: 54.234.11.193:10055 QUERY database=mongohqtestdatabase collection=galleries selector=  {"$query"=>{}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (276.2010

小姐)

哪个版本的 mongoid 适合 limit() ?

4

3 回答 3

29

limit命令工作正常,但由于某种原因count忽略了限制。如果将其转换为数组,您会看到限制有效。

Array(Gallery.limit(1)).length  # this gives 1

此外,如果您实际遍历对象,您会发现限制正在起作用。

于 2013-04-19T16:12:09.200 回答
18

正如官方Mongoid 回答中所建议的那样,我们应该使用Gallery.limit(1).count(true)

于 2014-10-14T02:00:23.003 回答
4

对于 Mongoid 5,CollectionView#count更改的参数:

    # Get a count of matching documents in the collection.
    #
    # @example Get the number of documents in the collection.
    #   collection_view.count
    #
    # @param [ Hash ] options Options for the count command.
    #
    # @option options :skip [ Integer ] The number of documents to skip.
    # @option options :hint [ Hash ] Override default index selection and force
    #   MongoDB to use a specific index for the query.
    # @option options :limit [ Integer ] Max number of docs to return.
    # @option options :max_time_ms [ Integer ] The maximum amount of time to allow the
    #   command to run.
    #
    # @return [ Integer ] The document count.
    #
    # @since 2.0.0

所以你可以做类似的事情

collection.count(limit: 1) # => 1
于 2016-05-19T20:20:50.453 回答