Un poco extraño en el rendimiento de la consulta ... Necesito ejecutar una consulta que haga un recuento total de documentos, y también puedo devolver un conjunto de resultados que puede ser limitado y compensado.
Entonces, tengo 57 documentos en total y el usuario quiere 10 documentos compensados por 20.
Puedo pensar en 2 formas de hacer esto, primero es consultar los 57 documentos (devueltos como una matriz), luego usar array.slice devuelve los documentos que desean. La segunda opción es ejecutar 2 consultas, la primera usando el método nativo 'count' de mongo, luego ejecutar una segunda consulta usando los agregadores nativos $ limit y $ skip de mongo.
¿Cuál crees que escalaría mejor? ¿Hacerlo todo en una consulta o ejecutar dos independientes?
Editar:
// 1 query
var limit = 10;
var offset = 20;
Animals.find({}, function (err, animals) {
if (err) {
return next(err);
}
res.send({count: animals.length, animals: animals.slice(offset, limit + offset)});
});
// 2 queries
Animals.find({}, {limit:10, skip:20} function (err, animals) {
if (err) {
return next(err);
}
Animals.count({}, function (err, count) {
if (err) {
return next(err);
}
res.send({count: count, animals: animals});
});
});
count()
función en PHP no tomalimit
oskip
en cuenta a menos que se lo que sólo se ejecuta una consulta de límite y salte y luego conseguir el conteo debe dar la solución más probable performant aquí. Sin embargo, ¿cómo sabrá que hay 57 documentos si no hace dos consultas para contar lo que hay actualmente? ¿Tiene un número estático que nunca cambia? Si no es así, deberá realizar tanto el salto como el límite y luego el conteo.