Relaciones muchos a muchos
La relacion muchos a muchos (N-N) es cuando un documento de una coleccion A puede estar relacionado con varios documentos de una coleccion B y viceversa.
Esta relacion es siempre Referencial
.
Se pueden realizar de 2 formas:
- Con una
coleccion intermediaria
, que hace de puente entre 1 o más colecciones. Embeber dentro de cada documento un arreglo con los identificadores
de sus relaciones.
Casos de uso
- Usar referencia cuando la relacion es N-N
Ejemplo:
Primera parte.
Un producto puede pertenecer a varias tiendas y una tienda puede tener varios productos. Lo realizaremos mediante un arreglo para referenciar.
Se utiliza una nomenclatura como cualquier otra propiedad pero con un doble corchete y de tipo ObjectId: products_ids[]:<ObjectId>
.
Insertar productos
db.products.insertMany([
{
name: 'Product 1',
sizes: ['L', 'M'],
price: 12
},
{
name: 'Product 2',
sizes: ['S', 'M'],
price: 9
},
{
name: 'Product 3',
sizes: ['L', 'M', 'XL'],
price: 16
},
])
Insertar Tiendas
db.stores.insertMany([
{
name: 'Store A',
products_ids: [
ObjectId("64991cdf44ec03dd012ecccd"),
ObjectId("64991cdf44ec03dd012eccce")
]
},
{
name: 'Store B',
products_ids: [
ObjectId("64991cdf44ec03dd012ecccc"),
ObjectId("64991cdf44ec03dd012eccce")
]
},
])
Usar LookUp
db.stores.aggregate([
{
$lookup: {
from: 'products',
localField: 'products_ids', // automaticamente detecta que es una lista
foreignField: '_id',
as: 'products'
}
}
])
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?