Overview
Esta página describe un modelo de datos que utiliza referencias entre documentos para describir relaciones de uno a muchos entre datos conectados.
Patrón
Considere el siguiente ejemplo que ilustra las relaciones entre editor y libro. El ejemplo ilustra la ventaja de referenciar en lugar de incrustar para evitar la repetición de la información del editor.
Incorporar el documento del editor dentro del documento del libro llevaría a una repetición de los datos del editor, como lo muestran los siguientes documentos:
{ title: "MongoDB: The Definitive Guide", author: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", publisher: { name: "O'Reilly Media", founded: 1980, location: "CA" } } { title: "50 Tips and Tricks for MongoDB Developer", author: "Kristina Chodorow", published_date: ISODate("2011-05-06"), pages: 68, language: "English", publisher: { name: "O'Reilly Media", founded: 1980, location: "CA" } }
Para evitar la repetición de los datos de la editorial, se debe utilizar referencias y mantener la información de la editorial en una colección separada de la colección de libros.
Cuando se utilizan referencias, el crecimiento de las relaciones determina dónde almacenar la referencia. Si el número de libros por editorial es pequeño y el crecimiento es limitado, a veces puede resultar útil almacenar la referencia del libro dentro del documento de la editorial. De lo contrario, si el número de libros por editorial es ilimitado, este modelo de datos resultaría en arreglos mutables y en crecimiento, como en el siguiente ejemplo:
{ name: "O'Reilly Media", founded: 1980, location: "CA", books: [123456789, 234567890, ...] } { _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" }
Para evitar arreglos mutables y en crecimiento, se puede almacenar la referencia del editor dentro del documento del libro:
{ _id: "oreilly", name: "O'Reilly Media", founded: 1980, location: "CA" } { _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" }