Agregue algún tipo de número de fila a un comando/tubería agregado mongodb
mongodb-query aggregation-framework (1)
La idea es devolver un tipo de número de fila a un comando / tubería agregado 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 sobre el rendimiento en grandes consultas, pero esta es al menos una opción.
Puede agregar sus resultados a una matriz agrupando / empujando 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 de $ skip avance hacia su rownum y obtendrá la posición real sin tener que empujar todos sus resultados para enumerarlos.