Docs Menu
Docs Home
/
Relational Migrator
/ /

埋め込みドキュメント

項目一覧

  • このタスクについて
  • 手順

外部キー関係を非正規化するには、 Embedded Documentsマッピング ルールを使用します。 Embedded Documentsを使用すると、親コレクションに子外部キー フィールドをネストできます。

Embedded Documentsオプションを使用してリレーショナル データを非正規化する場合、主なオプションは 2 つあります。

  • 子ドキュメントを親ドキュメントに埋め込み、 PrefixField nameを指定できます。

  • 親にマージすることができ、親レベルのフィールドとして行を表します。

Embedded Documentsマッピング ルールは、高度なマッピング ルール オプションです。 マッピング モデルに明示的に追加する必要があります。

  • Embedded Documentsマッピング ルールは、マッピング元の関係テーブルが外部キー関係の 1 つの側にある場合に使用できます。

  • 外部キーを含むテーブルも、MongoDB モデル内のコレクションにマップする必要があります。

1
  1. 左側のSchema modelペインで、 MongoDBまたはRelationalヘッダーの下のコレクションをクリックします。

    これにより、画面の右側でMappingsペインが開きます。

2
  1. Mapping画面から+ Addをクリックして新しいマッピング ルールを作成するか、次をクリックします:既存のルールを編集するには、 アイコンを使用します。

  2. Embedded documentsMigrate table as を選択します。

3
  1. ドロップダウンからSource tableまたはParent collectionの名前を選択します。

  2. ルート パスを設定します。

    • Prefix: ルール階層を指定します。

    • Field name: 埋め込み配列またはドキュメントを含むフィールドを指定します。

4

2 つのテーブル間に複数の外部キーがある場合に、どの外部キーに埋め込むかを選択できます。 このオプションは、複数の外部キー リンクを持つテーブルまたはコレクションにのみ表示されます。

  1. [ Foreign key linkドロップダウンから埋め込む外部キーの名前を選択します。

5
  1. をクリックして、親コレクション レベルでテーブル行をフィールドとしてマージしますフィールド名の横にあるアイコン。

6

式が trueを返す行を明示的に含めることができます。 これは、SQL クエリに基づいてフィルタリングし、特定のテーブルのすべての行に適用されるテーブル フィルターとは異なります。 マッピング ルール フィルターは特定のマッピングにのみ適用されます。

  1. Mappingsペインで次をクリックします: Advanced settingsの横にあるアイコン。

  2. [ Add mapping rule filterを選択しますアイコン。

  3. Value expressionテキスト ボックスに有効な JavaScript フィルター式を入力します。

7
  1. 新しいマッピング ルールの オプションを定義します。 マッピングルールのオプションを定義する際、次のことが可能です。

    • コレクション名を変更します。

      コレクション名を変更するには、 Nameテキストボックスをクリックして新しい名前を入力します。 Click outside of the text box to save the change. 名前がすでに使用されている場合は、検証エラーが表示されます。

    • 計算フィールドを追加して、リレーショナル ソース列に基づいて新しいフィールドを作成します。 詳細については、「計算フィールド 」を参照してください。

    • フィールド名を変更します。

    • 同期ジョブにフィールドを含めるか除外するには、次をクリックします。フィールド名の横にあるアイコン。

8
  1. [Save And Close] をクリックします。

このセクションでは、 Embedded Documentsマッピング ルールのリレーショナル入力と MongoDB 出力を示します。

この例では、次のことが行われます。

  • Embedded Documentsマッピング ルールがOrderテーブルに適用されます。

  • OrderLineテーブルには 2 行、 Orderテーブルには 1 行があります。

  • 親コレクションはOrderLineに設定されています。

  • Merge fields into the parent は選択されていません。

  • Field nameorderに設定されます。

この例の入力と出力を表示するには、以下のタブをクリックします。

OrderLine テーブル:

OrderLineID
注文ID
ProductID
数量
1
1
1
1
4
1
3
1

Order テーブル:

注文ID
カスタマー ID
TotalAmount
OrderStatusID
1
1
550.00
1

OrderLineコレクション内のドキュメントには、 Ordersという埋め込みドキュメントとして埋め込まれたOrderの詳細が含まれるようになりました。

{
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テーブルには 4 行、 の順序 テーブルには 3 行あります。

  • Embedded Documentsマッピング ルールがOrderテーブルに適用されます。

  • 親コレクションはOrderLineに設定されています。

  • Merge fields into the parent は選択されています。

  • Prefix(root)に設定されます。

この例の入力と出力を表示するには、以下のタブをクリックします。

OrderLine テーブル:

OrderLineID
注文ID
ProductID
数量
1
1
1
1
2
2
2
1
3
3
3
1
4
1
3
1

Order テーブル:

注文ID
カスタマー ID
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,
}

戻る

埋め込み配列