MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Adicione algum tipo de número de linha a um comando/pipeline agregado do mongodb


Não tenho certeza sobre o desempenho em grandes consultas, mas isso é pelo menos uma opção.

Você pode adicionar seus resultados a uma matriz agrupando/enviando e depois descontrair com includeArrayIndex assim:
[
  {$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
  }}
]

Agora, se seu banco de dados contém uma grande quantidade de registros, e você pretende paginar, você pode usar o estágio $skip e então $limit 10 ou 20 ou o que você quiser exibir por página, e basta adicionar o número do $skip stage para o seu rownum e você obterá a posição real sem ter que empurrar todos os seus resultados para enumerá-los.