Overview
Una de las ventajas del modelo de esquema enriquecido de MongoDB es la capacidad de almacenar matrices como valores de campo de documento. Almacenar matrices como valores de campo permite modelar relaciones de uno a muchos o de muchos a muchos en un solo documento, en lugar de hacerlo en colecciones separadas, como se haría en una base de datos relacional.
Sin embargo, debe tener cuidado si agrega elementos constantemente a las matrices de sus documentos. Si no limita el número de elementos en una matriz, sus documentos pueden alcanzar un tamaño impredecible. A medida que una matriz crece, el rendimiento de la lectura y la creación de índices en ella disminuye gradualmente. Una matriz grande y en crecimiento puede sobrecargar los recursos de la aplicación y poner en riesgo sus documentos de exceder la capacidad. Límitede tamaño del documento BSON.
En lugar de ello, considere limitar sus matrices para mejorar el rendimiento y mantener sus documentos en un tamaño manejable.
Ejemplo
Considere el siguiente esquema para un publishers recopilació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, la books matriz no tiene límites. Cada nuevo libro publicado por esta editorial añade un subdocumento a la books matriz. A medida que las editoriales siguen publicando libros, los documentos crecerán considerablemente y sobrecargarán de memoria la aplicación.
Para evitar matrices mutables e ilimitadas, separe la publishers colección en dos: una para publishers y otra books para. En lugar de incrustar todo el book documento en el publishers documento, incluya una referencia a la editorial 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 la matriz ilimitada de la colección publishers y coloca una referencia a la editorial en cada documento de libro mediante el campo publisher_id. Esto garantiza que cada documento tenga un tamaño manejable y evita el riesgo de que un campo de documento crezca excesivamente.
Las referencias de 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 universitario gratuito de MongoDB 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.