Optimizar un pipeline
Haz que una agregación lea menos documentos y toque menos rangos.
Haz que una agregación lea menos documentos y toque menos rangos. El router ya manda a cada rango la parte del pipeline que puede hacer solo; tú decides cuánto filtra esa parte.
Requisitos
- Una conexión con un usuario que tenga
readsobre la base.
Filtra lo antes posible
Pon $match y $project al principio, sobre campos con índice. Esas etapas se ejecutan en cada rango antes de juntar
resultados.
Ordena con límite
Un $sort seguido de $limit se convierte en un top-k por rango, que lee mucho menos que ordenar todo.
Mira el plan
JavaScript
db.pedidos.explain("executionStats").aggregate([{ $match: { estado: "pagado" } }, { $group: { _id: "$cliente" } }]);Comprobar
explain muestra los rangos tocados y cuántos documentos leyó cada etapa; los números bajan al filtrar antes.
Problemas frecuentes
- Un
$matchdespués de$groupno puede usar índices ni ir a cada rango; muévelo antes si filtra campos de los documentos.