Overview
Uno de los beneficios del modelo de esquema enriquecido de MongoDB es la capacidad de almacenar arreglos como valores de campo de documentos. Almacenar arreglos como valores de campos te permite modelar relaciones uno a muchos o muchos a muchos en un solo documento, en lugar de hacerlo por colecciones separadas como podrías en una base de datos relacional.
Sin embargo, se debe tener precaución al agregar elementos continuamente a los arreglos de tus documentos. Si no limitas el número de elementos en un arreglo, tus documentos podrían crecer hasta alcanzar un tamaño impredecible. A medida que un arreglo continúa creciendo, la lectura y la construcción de índices en ese arreglo disminuyen gradualmente su rendimiento. Un arreglo grande y en crecimiento puede sobrecargar los recursos de la aplicación y poner en riesgo tus documentos de superar el Límitede tamaño del documento BSON.
En su lugar, considere limitar sus arreglos para mejorar el rendimiento y mantener sus documentos en un tamaño manejable.
Ejemplo
Considera el siguiente esquema para un publishers colección:
// publishers collection { "_id": "orielly" "name": "O'Reilly Media", "founded": 1980, "location": "CA", "books": [ { "_id": 123456789, "title": "MongoDB: The Definitive Guide", "author": [ "Kristina Chodorow", "Mike Dirolf" ], "published_date": ISODate("2010-09-24"), "pages": 216, "language": "English" }, { "_id": 234567890, "title": "50 Tips and Tricks for MongoDB Developer", "author": "Kristina Chodorow", "published_date": ISODate("2011-05-06"), "pages": 68, "language": "English" } ] }
En este escenario, el arreglo books es ilimitada. Cada nuevo libro publicado por esta editorial agrega un nuevo subdocumento al arreglo books. A medida que las empresas editoriales continúen sacando libros, es probable que los documentos crezcan mucho y provoquen una cantidad desproporcionada de carga en la memoria de la aplicación.
Para evitar arreglos mutables y no acotadas, separa la colección publishers en dos colecciones, una para publishers y otra para books. En lugar de incorporar el documento completo book en el documento publishers, incluye una referencia al editor dentro del documento del libro:
// publishers collection { "_id": "oreilly" "name": "O'Reilly Media", "founded": 1980, "location": "CA" }
// books collection { "_id": 123456789, "title": "MongoDB: The Definitive Guide", "author": [ "Kristina Chodorow", "Mike Dirolf" ], "published_date": ISODate("2010-09-24"), "pages": 216, "language": "English", "publisher_id": "oreilly" } { "_id": 234567890, "title": "50 Tips and Tricks for MongoDB Developer", "author": "Kristina Chodorow", "published_date": ISODate("2011-05-06"), "pages": 68, "language": "English", "publisher_id": "oreilly" }
Este esquema actualizado elimina el arreglo ilimitado en la colección publishers y coloca una referencia al publicante en cada documento de libro usando el campo publisher_id. Esto garantiza que cada documento tenga un tamaño manejable y que no haya riesgo de que un campo del documento crezca de manera anormalmente grande.
Las referencias a documentos pueden requerir $lookups
Este enfoque funciona especialmente bien si su aplicación carga la información del libro y la editorial por separado. Si su aplicación requiere el libro y la información juntos, necesita realizar una operación para unir los datos $lookup de publishers las books colecciones y. Las operaciones no son muy eficientes, pero en este caso puede ser conveniente para evitar matrices$lookup ilimitadas.
Obtén más información
Para obtener más información sobre el Modelado de Datos en MongoDB y el modelo de esquema flexible, consulte Introducción al Modelado de Datos.
Para aprender a modelar relaciones con referencias a documentos, consulte Modelar relaciones de uno a muchos con referencias a documentos.
Para aprender a hacer queries a arreglos en MongoDB, consulta Query a un arreglo.
MongoDB también ofrece un curso gratuito de MongoDB University sobre modelado de datos: Modelado de datos para MongoDB.
Presentaciones de MongoDB.live 2020
Para aprender a incorporar el modelo de datos flexible en su esquema, consulte las siguientes presentaciones de MongoDB.live 2020:
Se puede aprender sobre las relaciones de entidades en MongoDB y ejemplos de sus implementaciones con Modelado de datos con MongoDB.
Se puede aprender sobre patrones avanzados de diseño de esquemas que se pueden incorporar en el esquema establecido con Patrones avanzados de diseño de esquemas.