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

Aggiungi una sorta di numero di riga a un comando / pipeline di aggregazione mongodb

Non sono sicuro delle prestazioni nelle query di grandi dimensioni, ma questa è almeno un'opzione.

Puoi aggiungere i risultati a un array raggruppando/spingendo e quindi rilassandoti con includeArrayIndex così:

[
  {$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
  }}
]

Ora, se il tuo database contiene una grande quantità di record e intendi impaginare, puoi utilizzare la fase $skip e quindi $limit 10 o 20 o qualsiasi cosa tu voglia visualizzare per pagina, e semplicemente aggiungere il numero da $skip stage al tuo rownum e otterrai la posizione reale senza dover spingere tutti i tuoi risultati per enumerarli.