Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

Reducir la cantidad de colecciones

Colecciones son agrupaciones de documentos de MongoDB, similar a una tabla de RDBMS. Una colección existe dentro de una sola base de datos.

Incluso si una colección no contiene ningún documento, aún conlleva un costo de recurso en forma de un índice _id por defecto que no se puede quitar. Aunque este índice no ocupa mucho espacio por sí solo (especialmente para colecciones pequeñas), si tienes miles de colecciones, estos índices pueden acumularse en recursos y tensionar la asignación de la base de datos.

Si tu implementación incluye un número innecesario o creciente de colecciones, deberías considerar reorganizar tus datos para reducir el número de colecciones y, en última instancia, disminuir los requisitos de recursos de tu aplicación.

Considera una base de datos temperatures que almacene colecciones de registros de temperatura obtenidos de un sensor. El sensor toma lecturas cada media hora desde las 10 AM hasta las 10 PM. Las lecturas de cada día se almacenan en una colección separada, nombrada por la fecha de la lectura:

// temperatures.march-09-2020
{
"_id": 1,
"timestamp": "2020-03-09T010:00:00Z",
"temperature": 29
}
{
"_id": 2,
"timestamp": "2020-03-09T010:30:00Z",
"temperature": 30
}
...
{
"_id": 25,
"timestamp": "2020-03-09T022:00:00Z",
"temperature": 26
}
// temperatures.march-10-2020
{
"_id": 1,
"timestamp": "2020-03-10T010:00:00Z",
"temperature": 30
}
{
"_id": 2,
"timestamp": "2020-03-10T010:30:00Z",
"temperature": 32
}
...
{
"_id": 25,
"timestamp": "2020-03-10T022:00:00Z",
"temperature": 28
}

Con cada día que pasa, el número de colecciones en la base de datos aumenta. Dado que el número de colecciones es ilimitado, hay una necesidad cada vez mayor de la base de datos de mantener estas colecciones y sus respectivos índices. Si la base de datos finalmente llega a un punto en el que gestiona miles de colecciones e índices, esto puede resultar en una degradación del rendimiento.

Además, este enfoque no facilita fácilmente las query a lo largo de varios días. Para consultar datos de varios días y obtener tendencias de temperatura durante períodos de tiempo más largos, sería necesario realizar una $lookup operación, que no es tan eficiente como hacer query de datos en la misma colección.

En su lugar, un mejor enfoque para estructurar estos datos es almacenar todas las lecturas de temperatura en una sola colección y tener las lecturas de cada día en un solo documento. Considera este esquema actualizado, donde todas las temperaturas están en una sola colección: temperatures.readings:

// temperatures.readings
{
"_id": ISODate("2020-03-09"),
"readings": [
{
"timestamp": "2020-03-09T010:00:00Z",
"temperature": 29
},
{
"timestamp": "2020-03-09T010:30:00Z",
"temperature": 30
},
...
{
"timestamp": "2020-03-09T022:00:00Z",
"temperature": 26
}
]
}
{
"_id": ISODate("2020-03-10"),
"readings": [
{
"timestamp": "2020-03-10T010:00:00Z",
"temperature": 30
},
{
"timestamp": "2020-03-10T010:30:00Z",
"temperature": 32
},
...
{
"timestamp": "2020-03-10T022:00:00Z",
"temperature": 28
}
]
}

Este esquema actualizado requiere muchos menos recursos que el esquema original. Ahora, en lugar de requerir un índice para cada día que se registran las temperaturas, el índice _id por defecto en esta colección ayuda a facilitar las consultas por fecha.

Para verificar el número de colecciones en tu base de datos, puedes ejecutar el siguiente comando desde mongosh:

db.getCollectionNames().length

El método db.stats() también devuelve el número de colecciones en su base de datos, junto con estadísticas útiles de la base de datos, como el tamaño total de sus datos e índices.

El Explorador de datos de Cloud Manager proporciona una visión general de alto nivel de las colecciones en tus bases de datos. El Explorador de datos muestra el tamaño total de una colección, incluido el tamaño de los índices de una colección. Si la mayoría del tamaño de una colección está compuesto por índices, se puede considerar consolidar los datos de esa colección en otra y eliminar la colección original. Consulta la documentación de $merge para obtener un enfoque sobre cómo fusionar datos de una colección a otra.

Además, si el examinador de datos revela que tienes colecciones vacías, puedes descartar esas colecciones directamente desde el examinador de datos.

El Real-Time Performance Panel de Cloud Manager muestra qué colecciones reciben más actividad. Puede utilizar esta herramienta para asegurarse de que antes de descartar una colección, no esté siendo utilizada activamente por su aplicación.

Para aprender a incorporar el modelo de datos flexible en su esquema, consulte las siguientes presentaciones de MongoDB.live 2020: