MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Impaginazione a intervalli MongoDB

Bella domanda!

"Quanti sono troppi?" - che, ovviamente, dipende dalla dimensione dei dati e dai requisiti di prestazioni. Personalmente, mi sento a disagio quando salto più di 500-1000 record.

La risposta effettiva dipende dalle tue esigenze. Ecco cosa fanno i siti moderni (o, almeno, alcuni di essi).

Innanzitutto, la barra di navigazione si presenta così:

1 2 3 ... 457

Ottengono il numero di pagina finale dal conteggio totale dei record e dalle dimensioni della pagina. Saltiamo a pagina 3. Ciò comporterà alcuni salti dal primo record. Quando arrivano i risultati, conosci l'ID del primo record a pagina 3.

1 2 3 4 5 ... 457

Saltiamo ancora un po' e andiamo a pagina 5.

1 ... 3 4 5 6 7 ... 457

Ti viene l'idea. In ogni punto vengono visualizzate la prima, l'ultima e la pagina corrente e anche due pagine avanti e indietro rispetto alla pagina corrente.

Query

var current_id; // id of first record on current page.

// go to page current+N
db.collection.find({_id: {$gte: current_id}}).
              skip(N * page_size).
              limit(page_size).
              sort({_id: 1});

// go to page current-N
// note that due to the nature of skipping back,
// this query will get you records in reverse order 
// (last records on the page being first in the resultset)
// You should reverse them in the app.
db.collection.find({_id: {$lt: current_id}}).
              skip((N-1)*page_size).
              limit(page_size).
              sort({_id: -1});