Docs Menu
Docs Home
/ /

マップスキーマの関係

データエンティティ間の関係をどのようにマッピングするかは、アプリケーションのパフォーマンスとスケーラビリティに影響します。

関連データを処理する推奨方法は、サブドキュメントに埋め込むことです。 関連データを埋め込むと、アプリケーションは 1 回の読み取り操作で必要なデータをクエリでき、低速の $lookup操作を回避できます。

一部のユースケースでは、参照を使用して別のコレクション内の関連データを示すことができます。

関連データを埋め込むか、参照を使用するかを判断するには、アプリケーションの次の目的の相対的な重要性を考慮してください。

関連データのクエリを改善する
アプリケーションが 1 つのエンティティについてのデータを返すために、1 つのエンティティを頻繁にクエリする場合は、頻繁に$lookup操作を必要としないようにデータを埋め込みます。
さまざまなエンティティから返されるデータを改善する
アプリケーションが関連エンティティのデータをまとめて返す場合は、そのデータを単一のコレクションに埋め込みます。
更新パフォーマンスの向上
アプリケーションが関連データを頻繁に更新する場合は、データを コレクションに保存し、 参照 を使用してそのコレクションにアクセスすることを検討してください。 参照を使用すると、データを 1 か所で更新するだけで、アプリケーションの書込みワークロードが軽減されます。

埋め込みデータと参照の利点について学ぶには、関連データのリンクを参照してください。

1

アプリケーションがクエリするデータと、エンティティが相互にどのように関連するかを特定します。

アプリケーション ワークロードの特定」ステップで、アプリケーションのワークロードから特定した操作について検討します。これらの操作が書き込む情報と返す情報、および複数の操作間で重複する情報に注意してください。

2

スキーマ マップには、関連するデータフィールドとそれらのフィールド間の関係のタイプ(1 対 1、1 対多、多対多)が表示されます。

スキーママップは エンティティ関係モデルに似ている場合があります。

3

データを埋め込むか参照を使用するかは、アプリケーションの一般的なクエリによって異なります。スキーマ設計プロセスの最初のステップで識別したクエリを確認し、このページの前半で説明したガイドラインを使用してスキーマを設計します。

選択したアプローチに一致するようにデータベース、コレクション、およびアプリケーション ロジックを構成します。

次の例は、アプリケーションのニーズに応じて、さまざまなクエリに対してスキーマを最適化する方法を示しています。

このページの例では、sample_mflixサンプルデータセットのデータを使用します。このデータセットを自己管理型MongoDB配置にロードする方法の詳細については、サンプルデータセットをロードする を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。

アプリケーションがtitleなどのフィールドの映画をクエリする場合は、関連情報をmoviesコレクションに埋め込みます。データを埋め込むと、アプリケーションが必要とするすべてのものが1回の操作で返されます。

次のドキュメントは、映画に対するクエリを最適化します。

db.movies.insertOne( {
title: "The Brutalist",
year: 2024,
runtime: 215,
genres: [ "Drama", "History" ],
comments: [
{
name: "joel_m",
email: "joel_m@gameofthron.es",
text: "Visually stunning!"
}
],
user: {
name: "Joel M",
email: "joel_m@gameofthron.es"
}
} )

アプリケーションが映画情報とユーザー情報を別々に返す場合は、映画とユーザーを別々のコレクションに保存することを検討します。このスキーマ設計により、ユーザー情報を返すのに必要な作業が減少され、不要なフィールドを含めずにユーザー情報のみを返すことができます。

次のスキーマでは、 moviesコレクションには usersコレクションへの参照である userIdフィールドが含まれています。

db.movies.insertOne( {
title: "A Complete Unknown",
year: 2024,
runtime: 141,
genres: [ "Biography", "Drama", "Music" ],
userId: 987
} )
db.users.insertOne( {
_id: 987,
name: "Joel M",
email: "joel_m@gameofthron.es"
} )

アプリケーションのデータの関係をマッピングしたら、スキーマ設計プロセスの次のステップは、設計パターンを適用してスキーマを最適化します。 「設計パターンの適用 」を参照してください。

戻る

ワークロードの特定

ルール バッジを取得する

「ドキュメントモデルに関連する」を無料でマスターします。

詳細

項目一覧