Agregue algún tipo de número de fila a un comando / tubería agregado de mongodb

La idea es devolver un tipo de número de fila a un comando / tubería agregado de mongodb. Similar a lo que tenemos en un RDBM.

Debe ser un número único, no importante si coincide exactamente con una fila / número.

Para una consulta como:

[ { $match: { "author" : { $ne: 1 } }} , { $limit: 1000000 } ] 

El regreso :

 { "rownum" : 0, "title" : "The Banquet", "author" : "Dante", "copies" : 2 } { "rownum" : 1, "title" : "Divine Comedy", "author" : "Dante", "copies" : 1 } { "rownum" : 2, "title" : "Eclogues", "author" : "Dante", "copies" : 2 } { "rownum" : 3, "title" : "The Odyssey", "author" : "Homer", "copies" : 10 } { "rownum" : 4, "title" : "Iliad", "author" : "Homer", "copies" : 10 } 

¿Es posible generar este rownum en mongodb?

No estoy seguro del rendimiento en consultas grandes, pero esta es al menos una opción.

Puede agregar sus resultados a una matriz agrupando / presionando y luego relajarse con includeArrayIndex esta manera:

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

Ahora, si su base de datos contiene una gran cantidad de registros y tiene la intención de paginar, puede usar la etapa $ skip y luego $ limit 10 o 20 o lo que quiera mostrar por página, y simplemente agregue el número del $ skip etapa a su Rownum y obtendrá la posición real sin tener que presionar todos los resultados para enumerarlos.