Docs Menu
Docs Home
/ /

MongoDBスキーマへの埋め込みデータ

埋め込みドキュメントは、関連するデータを単一のドキュメント構造にストアします。ドキュメントには、関連データを持つ配列とサブドキュメントを含めることができます。これらの非正規化されたデータモデルにより、アプリケーションは 1 回のデータベース操作で関連データを検索できます。

次の例では、contact フィールドと access フィールドは埋め込みドキュメントです。

関連するすべての情報を含む埋め込みフィールドを持つデータモデル。

埋め込みデータモデルは、頻繁にアクセスされるデータが複数のコレクションに重複するため、多くの場合、非正規化されていると見なされます。

埋め込みデータモデルを使用すると、アプリケーションは同じデータベースレコード内の関連情報をクエリできます。その結果、埋め込みには次のメリットが得られます。

  • 読み取り操作のパフォーマンス向上

  • 1 回のデータベース操作で関連データを取得できる

  • 1 回のアトミックな書き込み操作で関連データを更新できる

埋め込みドキュメントは、関連するデータを単一のドキュメント構造にストアします。ドキュメントには、関連データを持つ配列とサブドキュメントを含めることができます。これらの非正規化されたデータモデルにより、アプリケーションは 1 回のデータベース操作で関連データを検索できます。

注意

ドキュメント サイズの制限

MongoDBのドキュメントは 16 メガバイト未満である必要があります。

大規模なバイナリ データの場合は、 GridFSが検討されます。

埋め込みデータモデルは、以下のシナリオで使用します。

多数の小さなドキュメントを含むコレクションがある場合は、パフォーマンスを向上させるために 埋め込み を検討してください。これらの小さなドキュメントを何らかの論理的な関係でグループ化し、このグループ化でドキュメントを頻繁に検索する場合は、埋め込みドキュメントの配列を含む大きなドキュメントに、小さなドキュメントを「ロールアップ」することを検討してください。

これらの小さなドキュメントを論理グループに「ロールアップ」するということは、ドキュメントのグループを取得するためのクエリに含まれる順次読み取りで、ランダムなディスク アクセスが少なくなります。 さらに、ドキュメントを「ロールアップ」し、共通フィールドを大きなドキュメントに移動することは、これらのフィールドのインデックスにメリットをもたらす。 共通フィールドコピーが少なくなり、対応するインデックス内の関連するキーエントリも少なくなります。 インデックスの詳細については、「 インデックス 」を参照してください。

ただし、グループ内のドキュメントのサブセットのみを取得する必要が頻繁にある場合は、ドキュメントを「ロールアップ」してもパフォーマンスが向上しない可能性があります。 さらに、小さくて個別のドキュメントがデータの自然モデルを表す場合は、そのモデルを維持する必要があります。

埋め込みドキュメント内のデータをクエリするには、ドット表記を使用します。 配列と埋め込みドキュメント内のデータのクエリの例については、以下を参照してください。

戻る

ベストプラクティス

ルール バッジを取得する

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

詳細

項目一覧