2010-01-13 10 views
17

Ich habe MongoDB und RoR verwendet, um Protokolldaten zu speichern. Ich ziehe die Daten aus und schaue, um die Ergebnisse zu pagen. Hat irgendjemand mit MongoDB gepaged oder irgendwelche online verfügbaren Ressourcen kennengelernt, die mir helfen könnten, mich zu starten?Seitennummerierung mit MongoDB

Prost

Eef

Antwort

37

Paginierung in MongoDB kann durch Verwendung einer Kombination von limit() und skip() erreicht werden.

Nehmen wir zum Beispiel an, wir haben eine Sammlung namens Benutzer in unserer aktiven Datenbank.

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

Dies ruft eine Liste der ersten drei Benutzerdokumente für uns ab. Beachten Sie, dies ist im Wesentlichen das gleiche wie das Schreiben:

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

Für die nächsten drei, wir können dies tun:

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

Dieses überspringt den ersten drei Benutzerdatensätzen, und gibt uns die nächsten drei. Wenn sich in Ihrer Datenbank nur ein weiterer Benutzer befindet, machen Sie sich keine Sorgen. MongoDB ist schlau genug, nur vorhandene Daten zurückzugeben und stürzt nicht ab.

Dies kann wie folgt verallgemeinert werden und entspricht ungefähr dem, was Sie in einer Webanwendung tun würden. Angenommen, wir Variablen haben PAGE_SIZE genannt, die auf 3 gesetzt ist, und ein willkürliches PAGE_NUMBER:

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

ich nicht direkt sprechen, wie diese Methode in Ruby on Rails zu verwenden, aber ich vermute, dass die Ruby-MongoDB Bibliothek macht diese Methoden .

+1

Danke, Das scheint die Arbeit zu tun, aber jetzt Ruby beschweren Skip-Parameter muss int, seufz, danke dafür :) – RailsSon

+2

Ich habe gelesen DONT verwenden 'skip()', wie Bereiche besser für die Seitenumbruch arbeiten. –

+0

Gibt es eine bessere Alternative zum Überspringen() @tq? – film42

Verwandte Themen