使用Embedded Documents映射规则对外键关系进行非规范化。 使用Embedded Documents ,您可以在父collection中嵌套子外键字段。
使用Embedded Documents选项对关系数据进行非规范化时,您有两个主要选项:
您可以将子文档嵌入到父文档中,并指定Prefix和Field name 。
您可以合并到父项,这会将行表示为父项级别的字段。
Embedded Documents映射规则是高级映射规则选项。 必须将其显式添加到映射模型中。
关于此任务
如果Embedded Documents映射规则所映射的关系表位于外键关系的一侧,则该规则可用。
包含外键的表还必须映射到 MongoDB 模型中的 collection。
步骤
(可选)配置映射规则筛选器
允许您显式包含表达式返回true的行。 这与表筛选器不同,后者根据SQL查询进行过滤,并应用特定表中的所有行。 映射规则筛选器仅应用于特定映射。
在Mappings窗格中,单击Advanced settings旁边的图标。
选择Add mapping rule filter图标。
在Value expression文本框中输入有效的JavaScript过滤表达式。
示例
本部分演示了Embedded Documents映射规则的关系输入和 MongoDB 输出。
嵌入式文档
在本例中:
Embedded Documents映射规则应用于
Order表。OrderLine表有两行,Order表有一行。父collection设置为OrderLine 。
Merge fields into the parent 未选中。
将Field name设置为order 。
单击下面的标签页可查看此示例的输入和输出:
OrderLine 表:
OrderLineID | OrderID | ProductID | 数量 |
|---|---|---|---|
1 | 1 | 1 | 1 |
4 | 1 | 3 | 1 |
Order 表:
OrderID | CustomerID | TotalAmount | OrderStatusID |
|---|---|---|---|
1 | 1 | 550.00 | 1 |
OrderLine集合中的文档现在将Order详细信息嵌入为名为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, }, }
将字段合并到父字段中
在本例中:
OrderLine表有四行,Order 表有三行。Embedded Documents映射规则应用于
Order表。父collection设置为OrderLine 。
Merge fields into the parent 已选中。
将Prefix设置为(root) 。
单击下面的标签页可查看此示例的输入和输出:
OrderLine 表:
OrderLineID | OrderID | ProductID | 数量 |
|---|---|---|---|
1 | 1 | 1 | 1 |
2 | 2 | 2 | 1 |
3 | 3 | 3 | 1 |
4 | 1 | 3 | 1 |
Order 表:
OrderID | CustomerID | TotalAmount | OrderStatusID |
|---|---|---|---|
1 | 1 | 550.00 | 1 |
2 | 2 | 100.00 | 2 |
3 | 3 | 500.00 | 3 |
OrderLine集合中的文档将Order详细信息作为字段合并到父文档中。
{ _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, }