Docs 菜单
Docs 主页
/
Relational Migrator
/ /

嵌入式文档

在此页面上

  • 关于此任务
  • 步骤
  • 示例

使用 Embedded Documents映射规则对外键关系进行非规范化。 使用Embedded Documents ,您可以在父集合中嵌套子外键字段。

使用Embedded Documents选项对关系数据进行非规范化时,您有两个主要选项:

  • 您可以将子文档嵌入到父文档中,并指定PrefixField name

  • 您可以合并到父项,这会将行表示为父项级别的字段。

Embedded Documents映射规则是高级映射规则选项。 必须将其显式添加到映射模型中。

  • 如果Embedded Documents映射规则所映射的关系表位于外键关系的一侧,则该规则可用。

  • 包含外键的表还必须映射到 MongoDB 模型中的 collection。

1
  1. 在左侧Schema model窗格中,单击MongoDBRelational标题下的集合。

    这会提示Mappings窗格在屏幕右侧打开。

2
  1. Mapping屏幕中,单击+ Add以创建新的映射规则,或单击图标以编辑现有规则。

  2. 选择Embedded documents Migrate table as

3
  1. 从下拉列表中选择Source tableParent collection的名称。

  2. 配置根路径:

    • Prefix:指定规则层次结构。

    • Field name:指定包含嵌入式大量或文档的字段。

4

当两个表之间存在多个外键时,允许您选择要嵌入的外键。 此选项仅出现在具有多个外键链接的表或集合中。

  1. Foreign key link下拉列表中选择要嵌入的外键的名称。

5
  1. 将合并表行作为父集合级别的字段,方法是单击字段名称旁边的图标。

6

允许您显式包含表达式返回 true的行。 这与表筛选器不同,后者根据SQL查询进行过滤,并应用特定表中的所有行。 映射规则筛选器仅应用于特定映射。

  1. Mappings窗格中,单击Advanced settings旁边的图标。

  2. 选择Add mapping rule filter图标。

  3. Value expression文本框中输入有效的JavaScript过滤表达式。

7
  1. 为新映射规则定义选项。 定义映射规则选项时,您可以:

    • 更改collection名称。

      要更改集合名称,请单击Name文本框并输入新名称。 单击文本框外部以保存更改。 如果该名称已被使用,您会收到验证错误。

    • 添加计算字段以根据关系源列创建新字段。 有关更多信息,请参阅计算字段

    • 更改字段名称。

    • 单击字段名旁边的图标,在迁移作业中包含或排除字段。

8
  1. 单击 Save And Close(连接)。

本部分演示了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,
}

后退

嵌入式数组