mongoid .limit does not work in mongoid 3.1.x

2020-07-03 07:01发布

i tried something like this in rails with mongoid 3.1.0 and lastest 3.1.3. .limit does not work. below it should return 1 row but it returns all (4)

code:

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

output:

 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

ms)

which version of mongoid is good with limit() ?

3条回答
欢心
2楼-- · 2020-07-03 07:21

As suggested in the official Mongoid answer, we should be using Gallery.limit(1).count(true)

查看更多
forever°为你锁心
3楼-- · 2020-07-03 07:27

The limit command works fine, but for some reason count ignores the limit. If you cast it to an array you'll see that the limit is working.

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

Also, if you actually iterate through the objects you'll see that the limit is working.

查看更多
我欲成王,谁敢阻挡
4楼-- · 2020-07-03 07:28

For Mongoid 5 the parameter of CollectionView#count changed :

    # 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

So you can do something like

collection.count(limit: 1) # => 1
查看更多
登录 后发表回答