2010-01-13 5 views
17

Я использую MongoDB и RoR для хранения данных регистрации. Я вытаскиваю данные и просматриваю результаты. Кто-нибудь сделал пейджинг с MongoDB или узнал о любых ресурсах в Интернете, которые могли бы помочь мне начать?Pagination with MongoDB

Приветствия

Eef

ответ

37

Разбивка в MongoDB может быть достигнуто с помощью комбинации limit() и skip().

Например, предположим, что у нас есть коллекция, называемая пользователями в нашей активной базе данных.

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

Это извлекает список первых трех пользовательских документов для нас. Заметим, что это по сути то же самое, как написание:

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

В течение следующих трех, мы можем сделать это:

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

Это скачет в течение первых трех записей пользователей, и дает нам следующие три. Если в вашей базе данных есть только один пользователь, не беспокойтесь; MongoDB достаточно умен, чтобы только возвращать данные, которые присутствуют, и не будет разбиваться.

Это может быть обобщено так и должно быть примерно эквивалентно тому, что вы делаете в веб-приложении. Предположим, что мы имеем переменные, называемые PAGE_SIZE, который установлен на 3, и произвольное PAGE_NUMBER:

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

Я не могу говорить непосредственно о том, как использовать этот метод в Ruby On Rails, но я подозреваю, что библиотека Рубин MongoDB предоставляет эти методы ,

+1

Спасибо, Это похоже на работу, но теперь Ruby жалуется, что параметр skip должен быть int, вздох, спасибо за это :) – RailsSon

+2

Я прочитал DONT use 'skip()', поскольку диапазоны работают лучше для разбивки на страницы. –

+0

Есть ли лучшая альтернатива skip() @tq? – film42