2013-04-18 20 views
11

tôi đã thử một cái gì đó như thế này trong đường ray với mongoid 3.1.0 và mới nhất 3.1.3. .limit không hoạt động. dưới nó sẽ trả về 1 hàng nhưng nó sẽ trả về tất cả các mã (4)mongoid .limit không hoạt động trong mongoid 3.1.x

:

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

đầu ra:

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)

phiên bản mongoid là tốt với giới hạn ()?

Trả lời

25

Lệnh limit hoạt động tốt, nhưng vì lý do nào đó, count bỏ qua giới hạn. Nếu bạn đưa nó vào một mảng, bạn sẽ thấy rằng giới hạn đang hoạt động.

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

Ngoài ra, nếu bạn thực sự lặp qua các đối tượng, bạn sẽ thấy giới hạn đang hoạt động.

+1

nhờ. đây cũng là một answer.https: //github.com/mongoid/mongoid/issues/2981 – Axil

+1

Đó là lịch sự để upvote một câu trả lời nếu bạn thấy nó hữu ích, và chấp nhận nó nếu nó trả lời câu hỏi của bạn. – Leopd

14

Như đã đề cập trong chính thức Mongoid answer, chúng ta nên sử dụng Gallery.limit(1).count(true)

+2

@Dean liên kết của bạn đã chết – Geoffroy

+0

@Geoffroy Đã sửa lỗi liên kết! –

0

Đối Mongoid 5 tham số của CollectionView#count thay đổi:

# 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 

Vì vậy, bạn có thể làm điều gì đó như

collection.count(limit: 1) # => 1