嵌入式文档
使用 Embedded Documents映射规则对外键关系进行非规范化。 使用Embedded Documents ,您可以在父集合中嵌套子外键字段。
使用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, }