ホームページ >データベース >モンゴDB >MongoDBの埋め込みドキュメントと配列を使用するにはどうすればよいですか?

MongoDBの埋め込みドキュメントと配列を使用するにはどうすればよいですか?

Karen Carpenter
Karen Carpenterオリジナル
2025-03-11 18:09:15810ブラウズ

この記事では、Mongodbの埋め込みドキュメントと配列を説明します。ネストされたフィールドの作成、クエリ、および更新について説明し、埋め込みと参照のパフォーマンスへの影響を比較し、最適な効率のためのスキーマデザインのベストプラクティスを提供します

MongoDBの埋め込みドキュメントと配列を使用するにはどうすればよいですか?

mongodb

mongodbの柔軟性の柔軟性を通る柔軟性のドキュメントを介した柔軟なドキュメントを通る柔軟なドキュメントを通る柔軟なドキュメントを通る柔軟なドキュメントを通る柔軟なドキュメントを介して、Mongodb

h2 >

埋め込まれたドキュメントは、別のドキュメント内にネストされたドキュメントであり、配列にはドキュメントまたは値のリストがあります。それらの使用方法を調べてみましょう。

埋め込みドキュメントの作成と使用:関連データが小さく、常に一緒にアクセスするときに埋め込まれたドキュメントが理想的です。各ユーザーがアドレスを持っているユーザーコレクションを検討してください。個別のアドレスをコレクションと参照する代わりに、ユーザードキュメントにアドレスを直接埋め込むことができます:

 <code class="json"> {&quot; _id&quot;:objectid(&quot; ...&quot; ...&quot; ...)、&quot; quot; quot; quot; quot; quot; quot; &quot; address&quot;:{&quot; Street&quot;:&quot; 123 Main St&quot;、&quot; city&quot;:&quot; anytown&quot;、&quot; zip&quot;:&quot; 12345&quot; }} </code> 

クエリのドット表記を使用して埋め込みドキュメントにアクセスできます: db.users.find({&quot; address.city&quot;:&quot; anytown&quot;})。ドキュメント内にドキュメントの配列を埋め込むこともできます。たとえば、ユーザーは複数の電話番号を持っている場合があります:

 <code class="json"> {&quot; _id&quot;:objectid(&quot; ...&quot;)、&quot; quot; quot; quot; quot; quot; quot; quot; quot; quot; quot; quot; quot; quot;&quot;&quot;&quot;&quot;&quot; &quot; home&quot;、&quot; number&quot;:&quot; 555-1212&quot; }、{&quot; type; quot;:&quot; mobile&quot;、&quot; number&quot;:&quot; 555-3434&quot; }]} </code> 

配列の作成と使用:配列は簡単です。 $ push $ pull $ set などの更新オペレーターを使用して、要素を追加、削除、および更新することができます。たとえば、新しい電話番号の追加:

 <code class="javascript"> db.users.updateone({&quot; _id&quot;:objectid(&quot; ...&quot;)}、{$ push:{&quot; phones&quot; {&quot;&quot;&quot;&quot; &quot; 555-5656&quot;}})</code> 

埋め込み文書のパフォーマンスの影響

参照の選択はパフォーマンスに大きな影響を与えます。特に関連データが頻繁に必要な場合、埋め込みは一般に読み取りの方が速いです。すべての情報が単一のドキュメントにあるため、必要なデータベースクエリの数を減らします。ただし、埋め込みは、特に埋め込みデータが大きいか頻繁に更新されている場合、書き込みパフォーマンスとストレージコストに影響を与える可能性があるドキュメントサイズの大きさにつながる可能性があります。

参照には、関連データの個別のコレクションを作成し、オブジェクトIDを使用してリンクすることが含まれます。これは、大規模で頻繁に更新されるデータセットの方が適しています。読み取りは複数のクエリを必要とするため、わずかに遅くなりますが、文書は小さいため、通常はより速く、より効率的になります。参照は、データの複製を回避し、データの正規化を促進するのにも役立ちます。最良のアプローチは、特定のユースケースとデータ特性に依存します。この決定を下すときにデータサイズ、更新頻度、およびクエリパターンを検討してください。

ネストされたフィールドの効率的なクエリと更新

ネストされたフィールドのクエリと更新には、以前に見たドット表記を使用して必要です。たとえば、特定の電話番号を更新するには:

 <code class="javascript"> db.users.updateone({&quot; _id&quot;:objectid(&quot; ...&quot; ...&quot; ...&quot; ...&quot;:&quot; quot; quot; mobile&quot;}、{$ set:{&quot; &quot; 555-9876&Quot;より複雑なクエリまたは配列を含む更新については、集約パイプラインの使用を検討してください。集約は、ネストされたフィールドを含むデータを処理および変換するための強力なツールを提供します。たとえば、<code> $ unvind </code>を使用して、配列を個々のドキュメントに分解して、特定の要素のフィルタリングと更新を容易にすることができます。ネストされたフィールドで適切にインデックスを使用してクエリパフォーマンスを改善することを忘れないでください。ネストされたフィールドのインデックスは、<code> createIndex </code>コマンドのドット表記を使用して作成されます。 <h2>スキーマデザインのベストプラクティス</h2> <p>埋め込み文書と配列を備えたスケーラブルで保守可能なスキーマの設計には、慎重に検討する必要があります。大規模または頻繁に更新されるデータを参照する必要があります。 </p>
<li> <strong>データの複製:</strong>過度のデータの複製を避けてください。参照はこれを最小化するのに役立ちます。</li> <li> <strong>データサイズ:</strong>ドキュメントを妥当なサイズ(一般に16MB未満)に保ちます。大規模なドキュメントはパフォーマンスに悪影響を与える可能性があります。</li> <li> <strong>更新頻度:</strong>頻繁に更新されるデータは、書き込み競合を最小限に抑えるために参照するのに適しています。関連データを一緒に頻繁に照会する場合、埋め込みは通常有益です。</li> <li> <light>正規化: mongodbは柔軟性がありますが、データの整合性を維持し、冗長性を回避し、インデックスを避けるためにある程度の正規化を検討してください。検証:データの一貫性と品質を確保するためのスキーマ検証を実装します。これは、MongoDBのスキーマ検証機能やアプリケーション内のカスタム検証ロジックなどのツールを使用して実行できます。</light>
</li>  <p>これらのベストプラクティスに従って、効率的でスケーラブルで、メンテナンスが簡単なMongoDBスキーマを作成できます。最適なアプローチは、アプリケーションの特定のニーズに大きく依存していることを忘れないでください。</p></code>

以上がMongoDBの埋め込みドキュメントと配列を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。