two - pipeline mongodb
Marco de agregación de Mongodb: ¿$ group usa el índice? (3)
Estoy tratando de usar el marco de agregación con las etapas $match
y $group
. ¿La fase de $group
usa los datos de índice? Estoy usando la última versión mongodb disponible - 2.5.4
Como dice la respuesta de 4J41, $group
no usa (directamente) un índice, aunque $sort
hace si es la primera etapa en la tubería. Sin embargo, parece posible que $group
pueda, en principio, tener una implementación optimizada si sigue inmediatamente a $sort
, en cuyo caso usted podría hacer un uso efectivo de un índice poniendo un $sort
antes.
De todos modos, no parece haber una respuesta directa en los documentos sobre si $group
tiene esta optimización (aunque apuesto a que la habría si así fuera, así que esto sugiere que no es así). La respuesta está en el error 4507 de MongoDB : actualmente $group
NO tiene esta implementación, por lo que la línea superior de la respuesta de 4J41 es la correcta, después de todo. Si realmente necesita eficiencia, dependiendo de la aplicación, puede ser más rápido usar una consulta regular y hacer la agrupación en su código de cliente.
Modificado en la versión 3.2: A partir de MongoDB 3.2, los índices pueden cubrir un canal de agregación. En MongoDB 2.6 y 3.0, los índices no pudieron cubrir una canalización de agregación, ya que incluso cuando la tubería utiliza un índice, la agregación aún requiere acceso a los documentos reales.
https://docs.mongodb.com/master/core/aggregation-pipeline/#pipeline-operators-and-indexes
$group
no utiliza datos de índice.
De la docs mongoDB:
Los operadores de canalización $ match y $ sort pueden aprovechar un índice cuando se producen al comienzo de la tubería.
El operador de la tubería $ geoNear aprovecha un índice geoespacial. Cuando se utiliza $ geoNear, la operación de la tubería $ geoNear debe aparecer como la primera etapa en una tubería de agregación.