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 metaField. Si el valor del campo metaField corresponde a un documento, puede crear índices secundarios en los campos dentro de ese documento.
Nota
No se admiten todos los tipos de índice. Para obtener una lista de los tipos de índice no admitidos, consulte Limitaciones de los índices secundarios en colecciones de series temporales.
Por ejemplo, este comando crea un índice compuesto en los metadata.sensorId timestamp campos y:
db.weather24h.createIndex({ "metadata.sensorId": 1, "timestamp": 1 })
Utilice índices secundarios para mejorar el rendimiento de la clasificación
Las operaciones de ordenamiento en timeField y metaField pueden utilizar índices secundarios en esos 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 ordenamiento 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 temporales
Las sugerencias de índice hacen que MongoDB utilice un índice específico para una consulta. Algunas operaciones en colecciones de series temporales solo pueden aprovechar un índice si este se especifica en una sugerencia.
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 temporales, se pueden especificar sugerencias mediante el nombre del índice o el patrón de clave del índice. Para obtener los nombres de los índices de una colección, utilice el db.collection.getIndexes() método.
Índices secundarios de series temporales
A partir de MongoDB 6.0 (y 5.0.16):
Puede agregar un índice compuesto en campos de tiempo, metadatos o medición.
Puedes utilizar los operadores
$or,$iny$geoWithincon índices parciales en una colección de series de tiempo.Puede agregar índices parciales y 2dsphere en cualquier campo de una colección de series de tiempo.
Nota
Si existen índices secundarios en colecciones de series temporales y necesita degradar la versión de compatibilidad de características (fCV), primero debe eliminar cualquier índice secundario incompatible con la fCV degradada.setFeatureCompatibilityVersion Consulte.