MongoDB集約フレームワークは、データベース内で直接複雑なデータ変換を実行するための強力なツールです。パイプラインベースのアプローチを使用して、データが一連のステージを通過し、それぞれが特定の操作を実行します。これらの段階には、フィルタリング、グループ化、ソート、投影などが含まれます。例で説明しましょう。このようなドキュメントを含む sales
というコレクションがあると想像してください。 : ObjectId("5f9f16c75474444444444444"), "item" :" abc"、" price" :10、"数量" :2、" date" :Isodate(" 2024-01-15t00:00:00z")} {" _id" :ObjectId(" 5F9F16C75474444444444445")、" item" :" xyz"、" price" :20、"数量" :1、" date" :Isodate(" 2024-01-15t00:00:00z")} {" _id" :ObjectId(" 5F9F16C754744444444444446")、" item" :" abc"、" price" :10、"数量" :3、" date" :Isodate(" 2024-01-16T00:00:00Z")}
各アイテムの総収益を計算するには、次の集約パイプライン:
<pre class="brush:php;toolbar:false"> <code class="javascript"> db.sales.aggerati TotalRevenue:{$ sum:{$ multiply:[&quot; $ price;&quot;&quot; $ quot;}}}}}}}}}}}、{totalRevenue:-1}}] </code>
このパイプラインファーストグループは、 $> $> $> $> $> $> $> $> $> $> $> $> $> $> $> $> $> $> $> codeの最初のグループ。次に、各グループについて、 $ sum
および $ $ $
を使用して totalRevenue
を計算して、価格と数量を掛けます。最後に、 $ sort
を使用して、 totalRevenue
の降順で結果を並べ替えます。これは、複雑な変換のために複数の段階を一緒に連鎖させる方法を示しています。その他の一般的な段階には、 $ match
(フィルタリング)、 $プロジェクト
(フィールドの選択と名前変更)、 $ unvind
(deconstructing arrays)、および $ lookup
(他のコレクションと結合 - 後述)
特定の基準に一致するドキュメントを見つけるなどの簡単なクエリを超えて、集約フレームワークはデータの操作と分析を必要とするシナリオで優れています。いくつかの一般的なユースケースは次のとおりです。
$ match
、 $ sort
、 $ group
、および $ lookup
stagesで使用されているフィールドに適切なインデックスが作成されていることを確認します。インデックスはデータの検索を大幅に高速化します。 $ sum
は、値を合計するために $削減
よりも一般的に高速です。 $プロジェクト
ステージのみを投影して、データボリュームを減らすために必要なフィールドを投影します。結合コレクションには、Joinフィールドに適切なインデックスがあります。複雑な結合条件については、 $ lookup
let let and pipeline
を使用して db.collection.aggregate(...)。説明()
メソッドは実行計画を分析し、潜在的なボトルネックを識別します。 $ lookup
stage。 $ lookup
左外結合を実行し、指定された結合条件に基づいて別のコレクションからのデータを持ち込みます。たとえば、2つのコレクションを検討します。 :1、&quot; name&quot; :&quot; John Doe&quot; } {&quot; _id&quot; :2、&quot; name&quot; :&quot;ジェーン・スミス&quot; } //注文コレクション{&quot; _id&quot; :101、&quot; customer_id&quot; :1、&quot; quot; :100} {&quot; _id&quot; :102、&quot; customer_id&quot; :1、&quot; quot; :200} {&quot; _id&quot; :103、&quot; customer_id&quot; :2、&quot; quot; :50}
顧客情報を注文とともに取得するには、次の集約パイプラインを使用します。 &quot; quot;}])
このパイプラインは
and customer_id
結果には、顧客の情報と注文
フィールド内の関連する注文の配列が含まれます。 code> code> code>および<code> customer_id
フィールドで _id
フィールドでインデックスを作成することを忘れないでください 最適なパフォーマンスを提供します。 let
および pipeline
オプションを使用して、より複雑な結合条件を実現できます
以上が複雑なデータ変換にMongoDBの集約フレームワークを使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。