MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Pagination à distance MongoDB

Bonne question !

"Combien c'est trop?" - cela, bien sûr, dépend de la taille de vos données et des exigences de performances. Personnellement, je me sens mal à l'aise lorsque je saute plus de 500 à 1 000 enregistrements.

La réponse réelle dépend de vos besoins. Voici ce que font les sites modernes (ou, du moins, certains d'entre eux).

Tout d'abord, la barre de navigation ressemble à ceci :

1 2 3 ... 457

Ils obtiennent le numéro de page final à partir du nombre total d'enregistrements et de la taille de la page. Passons à la page 3. Cela impliquera des sauts à partir du premier enregistrement. Lorsque les résultats arrivent, vous connaissez l'identifiant du premier enregistrement à la page 3.

1 2 3 4 5 ... 457

Passons un peu plus loin et allons à la page 5.

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

Vous avez eu l'idée. À chaque point, vous voyez la première, la dernière et la page actuelle, ainsi que deux pages en avant et en arrière à partir de la page actuelle.

Requêtes

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});