Para la velocidad, me gustaría límite de una consulta de 10 resultados
db.collection.find( ... ).limit(10)
Sin embargo, también me gustaría saber el recuento total, por tanto, decir que «hubo 124, pero solo tengo 10». Hay una buena manera eficiente de hacer esto?
Por defecto,
count()
ignoralimit()
y cuenta los resultados de la consulta completa.Así, si por ejemplo hacer esto,
var a = db.collection.find(...).limit(10);
ejecución de
a.count()
le dará el recuento total de la consulta.Haciendo recuento(1) incluye el límite y saltar.
TypeError: with_limit_and_skip must be True or False
, count(True) va a hacer el trabajocursor.count()
debe ignorarcursor.skip()
ycursor.limit()
por defecto.Fuente: http://docs.mongodb.org/manual/reference/method/cursor.count/#cursor.count
La aceptó responder por @johnnycrab es para el mongo de la CLI.
Si tienes que escribir el mismo código en Node.js y Express.js usted tendrá que utilizar para poder utilizar la función «contar» junto con el método toArray del «resultado».
A continuación, puede ejecutar dos funciones después de esta (anidado en el otro)
Hay una solución mediante el empuje y la rebanada: https://stackoverflow.com/a/39784851/4752635
Me prefe
Solución con la que empuja $$ROOT y usando $rebanada de carreras en el documento de la limitación de memoria de 16MB para grandes colecciones. También, para grandes colecciones de dos consultas juntos parecen correr más rápido que el de uno con $$ROOT empujando. Se puede ejecutar en paralelo, de modo que sólo están limitadas por la más lenta de las dos consultas (probablemente el tipo).
Que se han asentado con esta solución con 2 consultas y marco de agregación (nota: yo uso node.js en este ejemplo, pero la idea es la misma):