MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Fügen Sie einem Mongodb-Aggregatbefehl / einer Pipeline eine Art Zeilennummer hinzu

Ich bin mir über die Leistung bei großen Abfragen nicht sicher, aber dies ist zumindest eine Option.

Sie können Ihre Ergebnisse durch Gruppieren/Pushen zu einem Array hinzufügen und dann mit includeArrayIndex abwickeln so:

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

Wenn Ihre Datenbank nun eine große Menge an Datensätzen enthält und Sie beabsichtigen zu paginieren, können Sie die Stufe $skip und dann $limit 10 oder 20 oder was auch immer Sie pro Seite anzeigen möchten, verwenden und einfach die Nummer aus $skip hinzufügen Bühne zu Ihrer Zeilennummer und Sie erhalten die tatsächliche Position, ohne alle Ihre Ergebnisse aufzählen zu müssen.