Usa el Embedded Documents regla de mapeo para desnormalizar una relación de clave foránea. Con Embedded Documents se pueden anidar campos de clave externa secundarios en una colección principal.
Tienes dos opciones principales al desnormalizar tus datos relacionales con la opción Embedded Documents:
Puedes insertar los documentos secundarios en el principal y designar un Prefix y Field name.
Puedes fusionar con el elemento primario, que representa las filas como campos a nivel primario.
La regla de mapeo Embedded Documents es una opción avanzada de regla de mapeo. Se debe añadir explícitamente a un modelo de mapeo.
Acerca de esta tarea
La regla de mapeo Embedded Documents está disponible si la tabla relacional desde la cual se está mapeando está en un lado de la relación de clave externa.
La tabla que contiene la clave foránea también debe estar mapeada a una colección en el modelo de MongoDB.
Pasos
(Opcional) Configurar varias claves externas
Te permite seleccionar cuál clave externa incrustar cuando hay más de una clave externa entre dos tablas. Esta opción solo aparece para tablas o colecciones con múltiples enlaces de clave externa.
Seleccione el nombre de la clave externa para incrustar desde el menú desplegable Foreign key link.
(Opcional) Configurar filtros de reglas de mapeo
Le permite incluir explícitamente filas donde una expresión retorna
true. Esto difiere de Filtros de tabla: filtran según una consulta SQL y se aplican a todas las filas de una tabla específica. Los filtros de reglas de mapeo solo se aplican a un mapeo específico.
En el panel Mappings, haz clic en el ícono junto a Advanced settings.
Seleccione el icono Add mapping rule filter .
Introduce una expresión de filtro JavaScript válida en el cuadro de texto Value expression.
Configurar campos
Defina las opciones para la nueva regla de mapeo. Al definir las opciones de la regla de mapeo, puede:
Cambia el nombre de la colección.
Para cambiar el nombre de la colección, haz clic en el cuadro de texto Name e introduce el nuevo nombre. Haz clic fuera del cuadro de texto para guardar el cambio. Si el nombre ya está en uso, recibirás un error de validación.
Agregue campos calculados para crear nuevos campos basados en columnas de origen relacionales.Consulte Campos calculados para obtener más información.
Cambiar los nombres de los campos.
Incluya o excluya un campo de su trabajo de migración haciendo clic en el ícono junto al nombre del campo.
Ejemplos
Esta sección demuestra la entrada relacional y la salida de MongoDB de la regla de mapeo Embedded Documents.
Documentos incrustados
En este ejemplo:
Una regla de mapeo Embedded Documents se aplica a la tabla
Order.La tabla
OrderLinetiene dos filas y la tablaOrdertiene una fila.La colección principal está establecida en OrderLine.
Merge fields into the parent no está seleccionada.
Field name está configurado en order.
Haga clic en las pestañas a continuación para ver la entrada y la salida de este ejemplo:
OrderLine tabla:
OrderLineID | OrderID | ProductID | Cantidad |
|---|---|---|---|
1 | 1 | 1 | 1 |
4 | 1 | 3 | 1 |
Order tabla:
OrderID | CustomerID | MontoTotal | OrderStatusID |
|---|---|---|---|
1 | 1 | 550.00 | 1 |
Los documentos en la colección OrderLine ahora tienen los detalles de Order integrados como un documento incrustado denominado Orders.
{ ObjectID: { OrderLineID: 1, }, OrderID: 1, ProductID: 1, Quantity: 1, Orders: { OrderID: 1, CustomerID: 1, TotalAmount: 550, OrderStatusID: 1, }, }, { ObjectID: { OrderLineID: 4, }, OrderID: 1, ProductID: 3, Quantity: 1, Orders: { OrderID: 1, CustomerID: 1, TotalAmount: 550, OrderStatusID: 1, }, }
Fusionar campos en el elemento principal
En este ejemplo:
La tabla
OrderLinetiene cuatro filas y la tabla Pedido tiene tres filas.Una regla de mapeo Embedded Documents se aplica a la tabla
Order.La colección principal está establecida en OrderLine.
Merge fields into the parent está seleccionado.
Prefix está configurado en (root).
Haga clic en las pestañas a continuación para ver la entrada y la salida de este ejemplo:
OrderLine tabla:
OrderLineID | OrderID | ProductID | Cantidad |
|---|---|---|---|
1 | 1 | 1 | 1 |
2 | 2 | 2 | 1 |
3 | 3 | 3 | 1 |
4 | 1 | 3 | 1 |
Order tabla:
OrderID | CustomerID | MontoTotal | OrderStatusID |
|---|---|---|---|
1 | 1 | 550.00 | 1 |
2 | 2 | 100.00 | 2 |
3 | 3 | 500.00 | 3 |
Los documentos de la colección OrderLine tienen los detalles Order fusionados en el documento principal como campos.
{ _id: { orderLineId: 1, }, orderId: 1, productId: 1, quantity: 1, customerId: 1, orderStatusId: 1, totalAmount: 550, }, { _id: { orderLineId: 2, }, orderId: 2, productId: 2, quantity: 1, customerId: 2, orderStatusId: 2, totalAmount: 100, }, { _id: { orderLineId: 3, }, orderId: 3, productId: 3, quantity: 1, customerId: 3, orderStatusId: 3, totalAmount: 500, }, { _id: { orderLineId: 4, }, orderId: 1, productId: 3, quantity: 1, customerId: 1, orderStatusId: 1, totalAmount: 550, }