Para mejorar el rendimiento de las consultas En las colecciones de series temporales, agregue uno o más índices secundarios para admitir patrones comunes de consulta de series temporales. En concreto, recomendamos crear uno o más índices compuestos en los campos especificados como timeField y el metaField. Si el valor del metaField campo es un documento, puedes crear índices secundarios en campos dentro de ese documento.
Nota
No todos los tipos de índices son compatibles. Para obtener una lista de tipos de índices no admitidos, consulte Limitaciones para índices secundarios en colecciones de series de tiempo.
Por ejemplo, este comando crea un índice compuesto en los campos metadata.sensorId y timestamp:
db.weather24h.createIndex({ "metadata.sensorId": 1, "timestamp": 1 })
Utiliza índices secundarios para mejorar el rendimiento de clasificación
Las operaciones de ordenación en timeField y metaField pueden usar índices secundarios en dichos campos para mejorar el rendimiento.
Por ejemplo, la siguiente colección sensorData contiene lecturas de temperatura:
db.sensorData.insertMany( [ { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2022-01-15T00:00:00.000Z"), "temperatureReading": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2022-01-15T04:00:00.000Z"), "temperatureReading": 11 }, { "metadata": { "sensorId": 5579, "type": "temperature" }, "timestamp": ISODate("2022-01-15T08:00:00.000Z"), "temperatureReading": 9 } ] )
El siguiente comando crea un índice secundario compuesto ascendente en los campos timestamp y metadata.sensorId:
db.sensorData.createIndex( { "timestamp": 1, "metadata.sensorId": 1 } )
La siguiente operación de ordenación en el campo timestamp utiliza el índice para mejorar el rendimiento:
db.sensorData.find().sort( { "timestamp": 1 } )
Para confirmar que la operación de ordenamiento usó el índice, ejecuta la operación nuevamente con la opción .explain():
db.sensorData.find().sort( { "timestamp": 1 } ).explain()
El winningPlan.queryPlan.inputStage.stage IXSCANes, lo que indica que se utilizó el índice. Para obtener más información sobre la salida del plan de explicación, consulte Resultados de Explain.
Especificar sugerencias de índice para colecciones de series de tiempo
Las sugerencias de índice hacen que MongoDB utilice un índice específico para una query. Algunas operaciones en colecciones de series temporales sólo pueden aprovechar un índice si ese índice se especifica en una indicación.
Por ejemplo, la siguiente consulta hace que MongoDB utilice el índice timestamp_1_metadata.sensorId_1:
db.sensorData.find( { "metadata.sensorId": 5578 } ).hint( "timestamp_1_metadata.sensorId_1" )
En una colección de series de tiempo, puedes especificar sugerencias usando el nombre del índice o el patrón de clave del índice. Para obtener los nombres de los índices en una colección, utiliza el método db.collection.getIndexes().
Índices Secundarios de series de tiempo
A partir de MongoDB 6.0 (y 5.0.16):
Puedes agregar un índice compuesto en los campos de tiempo, metadatos o medición.
Puedes utilizar los operadores
$or,$iny$geoWithincon índices parciales en una colección de series de tiempo.Puedes agregar índices parciales y 2dsphere en cualquier campo de una colección de series de tiempo.
Nota
Si existen índices secundarios en las colecciones de series de tiempo y necesitas degradar la versión de compatibilidad de características entre versiones (compatibilidad de características entre versiones), primero se deben descartar todos los índices secundarios que sean incompatibles con la compatibilidad de características entre versiones degradada. Consulte setFeatureCompatibilityVersion.