埋め込みドキュメント
外部キー関係を非正規化するには、 Embedded Documentsマッピング ルールを使用します。 Embedded Documentsを使用すると、親コレクションに子外部キー フィールドをネストできます。
Embedded Documentsオプションを使用してリレーショナル データを非正規化する場合、主なオプションは 2 つあります。
子ドキュメントを親ドキュメントに埋め込み、 PrefixとField nameを指定できます。
親にマージすることができ、親レベルのフィールドとして行を表します。
Embedded Documentsマッピング ルールは、高度なマッピング ルール オプションです。 マッピング モデルに明示的に追加する必要があります。
このタスクについて
Embedded Documentsマッピング ルールは、マッピング元の関係テーブルが外部キー関係の 1 つの側にある場合に使用できます。
外部キーを含むテーブルも、MongoDB モデル内のコレクションにマップする必要があります。
手順
(任意)マッピング ルール フィルターを構成する
式が true
を返す行を明示的に含めることができます。 これは、SQL クエリに基づいてフィルタリングし、特定のテーブルのすべての行に適用されるテーブル フィルターとは異なります。 マッピング ルール フィルターは特定のマッピングにのみ適用されます。
Mappingsペインで次をクリックします: Advanced settingsの横にあるアイコン。
[ Add mapping rule filterを選択しますアイコン。
Value expressionテキスト ボックスに有効な JavaScript フィルター式を入力します。
フィールドを構成する
新しいマッピング ルールの オプションを定義します。 マッピングルールのオプションを定義する際、次のことが可能です。
コレクション名を変更します。
コレクション名を変更するには、 Nameテキストボックスをクリックして新しい名前を入力します。 Click outside of the text box to save the change. 名前がすでに使用されている場合は、検証エラーが表示されます。
計算フィールドを追加して、リレーショナル ソース列に基づいて新しいフィールドを作成します。 詳細については、「計算フィールド 」を参照してください。
フィールド名を変更します。
移行ジョブにフィールドを含めるまたは除外するには、フィールド名の横にある アイコンをクリックします。
例
このセクションでは、 Embedded Documentsマッピング ルールのリレーショナル入力と MongoDB 出力を示します。
埋め込みドキュメント
この例では、次のことが行われます。
Embedded Documentsマッピング ルールが
Order
テーブルに適用されます。OrderLine
テーブルには 2 行、Order
テーブルには 1 行があります。親コレクションはOrderLineに設定されています。
Merge fields into the parent は選択されていません。
Field nameはorderに設定されます。
この例の入力と出力を表示するには、以下のタブをクリックします。
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, }