sql >> Base de Datos >  >> NoSQL >> MongoDB

Acelere la agregación de MongoDB

Actualmente existen algunas limitaciones en lo que puede hacer el marco de agregación para mejorar el rendimiento de su consulta, pero puede ayudarlo de la siguiente manera:

db.my_collection.aggregate([
    { "$sort" : { "LOG_TYPE" : 1 } },
    { "$group" :{ 
        "_id": "$LOG_TYPE",
        "COUNT": { "$sum":1 }
    }}
])

Al agregar una clasificación en LOG_TYPE, "obligará" al optimizador a usar un índice en LOG_TYPE para ordenar los documentos. Esto mejorará el rendimiento de varias maneras, pero de forma diferente según la versión que se utilice.

En datos reales, si tiene ordenados los datos que ingresan a la etapa de grupos de $, mejorará la eficiencia de acumulación de los totales. Puede ver los diferentes planes de consulta donde con $sort usará el índice de clave de fragmento. La mejora que esto brinde en el rendimiento real dependerá de la cantidad de valores en cada "cubo":en general, LOG_TYPE que tiene solo siete valores distintos lo convierte en una clave de fragmento extremadamente pobre, pero significa que es muy probable que el siguiente código sea un mucho más rápido incluso que la agregación optimizada:

db.my_collection.distinct("LOG_TYPE").forEach(function(lt) {
   print(db.my_collection.count({"LOG_TYPE":lt});
});