2010-01-13 35 views
17

Tôi đã sử dụng MongoDB và RoR để lưu trữ dữ liệu ghi nhật ký. Tôi đang kéo dữ liệu ra và tìm đến trang kết quả. Có ai đã thực hiện phân trang với MongoDB hoặc biết bất kỳ tài nguyên trực tuyến nào có thể giúp tôi bắt đầu không?Phân trang với MongoDB

Cheers

Eef

Trả lời

37

Pagination trong MongoDB có thể được thực hiện bằng cách sử dụng một sự kết hợp của limit()skip().

Ví dụ: giả sử chúng tôi có một bộ sưu tập được gọi là người dùng trong cơ sở dữ liệu hoạt động của chúng tôi.

>> db.users.find().limit(3) 

Thao tác này sẽ truy xuất danh sách ba tài liệu người dùng đầu tiên cho chúng tôi. Lưu ý, đây thực chất là giống như viết:

>> db.users.find().skip(0).limit(3) 

Trong ba hôm sau, chúng ta có thể làm điều này:

>> db.users.find().skip(3).limit(3) 

này bỏ qua trong ba hồ sơ người dùng đầu tiên, và cho chúng ta ba tới. Nếu chỉ có thêm một người dùng trong cơ sở dữ liệu của bạn, đừng lo lắng; MongoDB đủ thông minh để chỉ trả về dữ liệu hiện tại và sẽ không bị lỗi.

Điều này có thể được khái quát hóa như vậy và tương đương với những gì bạn sẽ làm trong một ứng dụng web. Giả sử chúng ta có các biến được gọi là PAGE_SIZE mà được thiết lập đến 3, và một tùy PAGE_NUMBER:

>> db.users.find().skip(PAGE_SIZE * (PAGE_NUMBER - 1)).limit(PAGE_SIZE) 

Tôi không thể nói chuyện trực tiếp như thế nào để sử dụng phương pháp này trong Ruby on Rails, nhưng tôi nghi ngờ các thư viện Ruby MongoDB cho thấy những phương pháp .

+1

Cảm ơn, Điều đó dường như thực hiện công việc nhưng bây giờ Ruby đang phàn nàn tham số bỏ qua là int, sigh, thanks for that :) – RailsSon

+2

tôi đã đọc DONT sử dụng 'skip()', vì phạm vi hoạt động tốt hơn cho phân trang. –

+0

Có cách nào khác tốt hơn để bỏ qua() @tq không? – film42