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

Ajouter une sorte de numéro de ligne à une commande/un pipeline d'agrégation mongodb

Je ne suis pas sûr des performances dans les requêtes volumineuses, mais c'est au moins une option.

Vous pouvez ajouter vos résultats à un tableau en regroupant/poussant, puis déroulez avec includeArrayIndex comme ceci :

[
  {$match: {author: {$ne: 1}}},
  {$limit: 10000},
  {$group: {
    _id: 1,
    book: {$push: {title: '$title', author: '$author', copies: '$copies'}}
  }},
  {$unwind: {path: '$book', includeArrayIndex: 'rownum'}},
  {$project: {
    author: '$book.author',
    title: '$book.title',
    copies: '$book.copies',
    rownum: 1
  }}
]

Maintenant, si votre base de données contient une grande quantité d'enregistrements et que vous avez l'intention de paginer, vous pouvez utiliser l'étape $skip puis $limit 10 ou 20 ou tout ce que vous voulez afficher par page, et ajoutez simplement le nombre de $skip étape à votre rownum et vous obtiendrez la position réelle sans avoir à pousser tous vos résultats pour les énumérer.