Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

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

Si su esquema almacena los mismos datos en varias colecciones, puede incrustar datos relacionados para eliminar la duplicación. El esquema actualizado y desnormalizado mantiene la coherencia de los datos al mantener los valores en una única 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 Enlace de datos relacionados.

Revise los diferentes métodos para garantizar la consistencia de los datos y garantizar que la incrustación sea la mejor opción para su aplicación. Para más información, consulte Consistencia 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 consulta a un vendedor específico. No requiere lógica ni mantenimiento adicionales para mantener la coherencia de los datos, ya que se desnormalizan en una sola 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