Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Se puede aplicar la coherencia de los datos mediante incrustación

Si tu esquema almacena los mismos datos en varias colecciones, puedes integrar datos relacionados para remover la duplicación. El esquema actualizado y desnormalizado mantiene la coherencia de los datos al mantener los valores de los datos en una sola ubicación.

Incorporar datos relacionados simplifica su esquema y garantiza que el usuario siempre lea los datos más actualizados. Sin embargo, el embedding puede no ser la mejor opción para representar relaciones complejas como las de muchos a muchos.

La forma óptima de incrustar datos relacionados depende de las consultas que ejecute su aplicación. Al incorporar datos en una única colección, analiza los índices que permiten las queries eficientes y estructura tu esquema para permitir índices eficientes y lógicos.

Para comparar los beneficios de incorporar documentos y referencias, consulta Vincular datos relacionados.

Revisa los distintos métodos para aplicar la coherencia de los datos y asegurarte de que la integración sea el mejor enfoque para tu aplicación. Para obtener más información, consulte Coherencia de datos.

Actualizar la forma en que los datos se almacenan en tu base de datos puede afectar los índices y consultas existentes. Cuando actualices tu esquema, también actualiza los índices y las consultas de tu aplicación para tener en cuenta los cambios en el esquema.

El siguiente ejemplo aplica la coherencia de los datos en una aplicación de comercio electrónico. En el esquema inicial, la información del producto se duplica en el products y sellers colecciones. El campo sellerId en la colección products es una referencia a la colección sellers y vincula los datos entre sí.

// products collection
[
{
_id: 111,
sellerId: 456,
name: "sweater",
price: 30,
rating: 4.9,
color: "green"
},
{
_id: 222,
sellerId: 456,
name: "t-shirt",
price: 10,
rating: 4.2,
color: "blue"
},
{
_id: 333,
sellerId: 456,
name: "vest",
price: 20,
rating: 4.7,
color: "red"
}
]
// sellers collection
[
{
_id: 456,
name: "Cool Clothes Co",
location: {
address: "21643 Andreane Shores",
state: "Ohio",
country: "United States"
},
phone: "567-555-0105",
products: [
{
id: 111,
name: "sweater",
price: 30
},
{
id: 222,
name: "t-shirt",
price: 10
},
{
id: 333
name: "vest",
price: 20
}
]
}
]

Para desnormalizar el esquema y aplicar la coherencia, incrusta la información del producto dentro de la colección sellers:

db.sellers.insertOne(
{
_id: 456,
name: "Cool Clothes Co",
location: {
address: "21643 Andreane Shores",
state: "Ohio",
country: "United States"
},
phone: "567-555-0105",
products: [
{
id: 111,
name: "sweater",
price: 30,
rating: 4.9,
color: "green"
},
{
id: 222,
name: "t-shirt",
price: 10,
rating: 4.2,
color: "blue"
},
{
id: 333,
name: "vest",
price: 20,
rating: 4.7,
color: "red"
}
]
}
)

El esquema actualizado devuelve toda la información del producto cuando un usuario hace una query sobre un vendedor en particular. El esquema actualizado no requiere lógica adicional ni mantenimiento para mantener la coherencia de los datos, ya que la información se desnormaliza en una única colección.

Tras reestructurar tu esquema, puedes crear índices para soportar common queries. Por ejemplo, si los usuarios suelen query productos por color, puedes crear un índice en el campo products.color:

db.sellers.createIndex( { "products.color": 1 } )

Volver

Usa transacciones

En esta página