Referencias circulares o bidireccionales
Es parte del N-N. Donde cada coleccion tiene documentos que apuntan a todos los relacionados de otra coleccion (O en la misma).
Casos de uso
- Usa refencia cuando la
relacion es n-n
- Cuando la información es
consultada en conjunto
. Por si necesitamos las referencias que tiene algun documento sin importal cual sea. Para resolver más facil relaciones y rapido.
Ejemplo
Parte 2.
Ahora trabajemos en la otra referencia.
Facilitar la busqueda de ID
para el proximo proceso
db.products.aggregate([
{
$lookup: { // buscar las id que necesitamos
from: 'stores',
localField: '_id',
foreignField: 'products_ids',
as: 'stores'
}
},
{
$project: { // filtrar para ver mejor las id
_id: 1, // id producto
stores: { // en tiendas
_id: 1 // id tienda
}
}
}
])
Modificar Productos
// prod 1
db.products.updateOne(
{_id: ObjectId('649923c970dfee1c60f23f54')},
{
$set: {
stores_ids: [
ObjectId("649923f457514437ac501dd4")
]
}
}
)
// prod 2
db.products.updateOne(
{_id: ObjectId('649923c970dfee1c60f23f55')},
{
$set: {
stores_ids: [
ObjectId("649923f457514437ac501dd4"),
ObjectId("649923f457514437ac501dd5"),
]
}
}
)
//prod 3
db.products.updateOne(
{_id: ObjectId('649923c970dfee1c60f23f56')},
{
$set: {
stores_ids: [
ObjectId("649923f457514437ac501dd5")
]
}
}
)
Ver las tiendas en el producto
use("platzi_store")
db.products.find()
db.products.aggregate([
{
$lookup: { // buscar las id que necesitamos
from: 'stores',
localField: 'stores_ids',
foreignField: '_id',
as: 'stores'
}
}
])
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?