2010-01-13 23 views
17

Używam MongoDB i RoR do przechowywania danych logowania. Wyciągam dane i szukam wyników na stronie. Czy ktoś zrobił stronicowanie z MongoDB lub zna jakieś zasoby online, które mogłyby pomóc mi zacząć?Paginacja z MongoDB

zdrowie

Eef

Odpowiedz

37

Stronicowanie w MongoDB można osiągnąć stosując kombinację limit() i skip().

Załóżmy na przykład, że mamy kolekcję o nazwie użytkownicy w naszej aktywnej bazie danych.

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

Powoduje wyświetlenie dla nas listy pierwszych trzech dokumentów użytkownika. Uwaga, to jest w zasadzie takie same jak pisanie:

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

przez następne trzy, możemy to zrobić:

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

ten pomija pierwszych trzech rejestrów użytkowników, a daje nam następne trzy. Jeśli w bazie danych jest tylko jeden użytkownik, nie martw się; MongoDB jest wystarczająco inteligentny, aby tylko zwracać dane, które są obecne i nie ulega awarii.

Można to uogólnić tak, jak jest, i byłoby mniej więcej podobne do tego, co zrobiłbyś w aplikacji internetowej. Zakładając, że mamy zmienne zwane PAGE_SIZE który jest ustawiony na 3, a dowolna PAGE_NUMBER:

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

nie mogę mówić bezpośrednio, jak zastosować tę metodę w Ruby on Rails, ale podejrzewam, biblioteka Ruby MongoDB naraża tych metod .

+1

Dzięki, Wydaje się, że wykonuję zadanie, ale teraz Ruby narzeka, że ​​parametr pominięcia musi być int, westchnienie, dziękuję za to :) – RailsSon

+2

Przeczytałem DONT użyj 'skip()', ponieważ zakresy działają lepiej na paginację. –

+0

Czy istnieje lepsza alternatywa dla pominięcia() @tq? – film42