Estoy escribiendo una aplicación web con Node.js y mangosta. ¿Cómo puedo paginar los resultados que obtengo de una .find()
llamada? Me gustaría una funcionalidad comparable a la "LIMIT 50,100"
de SQL.
mongodb
node.js
pagination
mongoose
Thomas
fuente
fuente
Respuestas:
Estoy muy decepcionado por las respuestas aceptadas en esta pregunta. Esto no escalará. Si lees la letra pequeña en cursor.skip ():
Para lograr la paginación de manera escalable, combine un límite () junto con al menos un criterio de filtro, una fecha de creación se adapta a muchos propósitos.
fuente
-createdOn
', reemplazaría el valor derequest.createdOnBefore
con el menor valorcreatedOn
devuelto en el conjunto de resultados anterior, y luego consulta.Después de echar un vistazo más de cerca a la API de Mongoose con la información proporcionada por Rodolphe, descubrí esta solución:
fuente
Paginación con mangosta, express y jade: aquí hay un enlace a mi blog con más detalle
fuente
Math.max(0, undefined)
volveráundefined
, Esto funcionó para mí:let limit = Math.abs(req.query.limit) || 10;
let page = (Math.abs(req.query.page) || 1) - 1;
Schema.find().limit(limit).skip(limit * page)
Puedes encadenar así:
Ejecute la consulta usando
exec
fuente
var page = req.param('p'); var per_page = 10; if (page == null) { page = 0; } Location.count({}, function(err, count) { Location.find({}).skip(page*per_page).limit(per_page).execFind(function(err, locations) { res.render('index', { locations: locations }); }); });
En este caso, puede agregar la consulta
page
y / olimit
su URL como una cadena de consulta.Por ejemplo:
?page=0&limit=25 // this would be added onto your URL: http:localhost:5000?page=0&limit=25
Como sería un
String
, necesitamos convertirlo en aNumber
para nuestros cálculos. Hagámoslo usando elparseInt
método y también proporcionemos algunos valores predeterminados.Por cierto, la paginación comienza con
0
fuente
mongoose
.Puede usar un pequeño paquete llamado Paginate de mangosta que lo hace más fácil.
Después de en sus rutas o controlador, simplemente agregue:
fuente
Este es un ejemplo de ejemplo, puedes probar esto,
fuente
Intente usar la función mangosta para la paginación. El límite es el número de registros por página y el número de la página.
fuente
Esto es lo que hice en el código
Así es como lo hice.
fuente
count()
es obsoleto. usocountDocuments()
Consulta;
búsqueda = productName,
Params;
página = 1
fuente
Aquí hay una versión que adjunto a todos mis modelos. Depende del guión bajo para mayor comodidad y asíncrono para el rendimiento. La opción permite la selección y clasificación de campos utilizando la sintaxis de mangosta.
Adjúntelo a su esquema de modelo.
fuente
Solución de paginación simple y potente.
last_doc_id
: la última identificación de documento que obtienesno_of_docs_required
: el número de documentos que desea recuperar, es decir, 5, 10, 50, etc.last_doc_id
método, obtendrá 5 documentos más recientes.last_doc_id
, obtendrá los siguientes, es decir, 5 documentos.fuente
La respuesta anterior es válida.
fuente
puedes usar la siguiente línea de código también
este código funcionará en la última versión de mongo
fuente
Un enfoque sólido para implementar esto sería pasar los valores de la interfaz utilizando una cadena de consulta . Digamos que queremos obtener la página 2 y también limitar el resultado a 25 resultados .
La cadena de consulta se vería así:
?page=2&limit=25 // this would be added onto your URL: http:localhost:5000?page=2&limit=25
Veamos el código:
Sugeriría implementar esta lógica en middleware para que pueda usarla en varias rutas / controladores.
fuente
La forma más fácil y rápida es paginar con el ejemplo objectId;
Condición de carga inicial
Tome el primer y último ObjectId de los datos de respuesta
Página siguiente condición
Página siguiente condición
En mangosta
fuente
El mejor enfoque (IMO) es usar saltar y limitar PERO dentro de colecciones o documentos limitados.
Para realizar la consulta dentro de documentos limitados, podemos usar un índice específico como índice en un campo de tipo FECHA. Mira eso a continuación
fuente
El complemento más fácil para la paginación.
https://www.npmjs.com/package/mongoose-paginate-v2
Agregue el complemento a un esquema y luego use el método de paginación modelo:
fuente
Esta es una función de ejemplo para obtener el resultado del modelo de habilidades con opciones de paginación y límite
}
fuente
Puede escribir una consulta como esta.
página: número de página que proviene del cliente como parámetros de solicitud.
por página: no se muestran resultados por página
Si está utilizando MEAN stack, la siguiente publicación de blog proporciona gran parte de la información para crear paginación en el front-end usando bootstrap de interfaz de usuario angular y usando métodos de salto y límite de mangosta en el back-end.
ver: https://techpituwa.wordpress.com/2015/06/06/mean-js-pagination-with-angular-ui-bootstrap/
fuente
Puede usar skip () y limit (), pero es muy ineficiente. Una mejor solución sería ordenar en campo indexado más limit (). Nosotros en Wunderflats hemos publicado una pequeña biblioteca aquí: https://github.com/wunderflats/goosepage Utiliza la primera manera.
fuente
Si está usando mangosta como fuente de una API relajante, eche un vistazo a ' restify-mangosta ' y sus consultas. Tiene exactamente esta funcionalidad incorporada.
Cualquier consulta en una colección proporciona encabezados que son útiles aquí
Entonces, básicamente, obtienes un servidor genérico con un tiempo de carga relativamente lineal para consultas a colecciones. Eso es increíble y algo a tener en cuenta si quieres entrar en una implementación propia.
fuente
fuente
fuente
Usa este simple complemento.
https://github.com/WebGangster/mongoose-paginate-v2
Instalación
fuente
de acuerdo a
responder:
fuente
Usando ts-mangosta-paginación
fuente
fuente
También pude lograr resultados con async / wait.
Ejemplo de código a continuación utilizando un controlador asíncrono con hapi v17 y mongoose v5
fuente