Las referencias almacenan relaciones entre datos mediante la inclusión de enlaces, llamados referencias, de un documento a otro. Las aplicaciones pueden resolver estas referencias para acceder a los datos relacionados. En el siguiente ejemplo, contact y access documentos contienen una referencia al documento user.
Las referencias producen modelos de datos normalizados porque los datos se dividen en múltiples colecciones y no se duplican.
Casos de uso
Aunque un modelo de datos desnormalizado funciona para la mayoría de los casos en MongoDB, considera usar referencias en lugar de datos incrustados si:
La incrustación tendría como resultado la duplicación de datos, pero no ofrecería suficientes ventajas de rendimiento de lectura para compensar las implicaciones de dicha duplicación. Por ejemplo, cuando los datos incrustados cambian con frecuencia.
Necesita representar relaciones complejas de muchos a muchos o grandes conjuntos de datos jerárquicos.
Es necesario consultar frecuentemente a la entidad relacionada por sí sola.
Gran número de colecciones
En determinadas situaciones, es posible que elija almacenar información relacionada en varias colecciones en lugar de en una sola.
Considera una colección de muestra, logs, que almacena documentos de registro para varios entornos y aplicaciones. La colección logs contiene documentos del siguiente formato:
{ log: "dev", ts: ..., info: ... } { log: "debug", ts: ..., info: ...}
Si el número total de documentos es bajo, puede agruparlos en colecciones por tipo. Para los registros, considere mantener colecciones de registros distintas, como logs_dev y logs_debug.
Generalmente, tener un gran número de colecciones no supone una pérdida significativa de rendimiento y se traduce en un buen rendimiento. Disponer de colecciones diferenciadas es fundamental para el procesamiento por lotes de alto rendimiento.
Cuando utiliza modelos que tienen una gran cantidad de colecciones, tenga en cuenta los siguientes comportamientos:
Cada colección tiene una sobrecarga mínima determinada de unos pocos kilobytes.
Las operaciones de lectura no indexadas pueden consumir una gran cantidad de memoria.
Para cada uno Base de datos: un único archivo de espacio de nombres (como)
<database>.nsalmacena todos los metadatos de esa base de datos. Cada índice y colección tiene su propia entrada en el archivo de espacio de nombres. Consulte los límites de longitud del espacio de nombres de lugares para conocer las limitaciones específicas.
Consultar modelos de datos normalizados
Para consultar datos normalizados en múltiples colecciones, MongoDB proporciona las siguientes etapas de agregación de datos:
Para un ejemplo de modelos de datos normalizados, vea Modelar relaciones de uno a muchos con referencias de documentos.
Para ejemplos de varios modelos de árbol, vea Modelar estructuras en forma de árbol.