ホームページ > データベース > モンゴDB > 複雑なデータ変換にMongoDBの集約フレームワークを使用するにはどうすればよいですか?

複雑なデータ変換にMongoDBの集約フレームワークを使用するにはどうすればよいですか?

Robert Michael Kim
リリース: 2025-03-11 18:07:08
オリジナル
250 人が閲覧しました

複雑なデータ変換にMongoDB集約フレームワークを使用する方法

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 (他のコレクションと結合 - 後述)

クエリ?

特定の基準に一致するドキュメントを見つけるなどの簡単なクエリを超えて、集約フレームワークはデータの操作と分析を必要とするシナリオで優れています。いくつかの一般的なユースケースは次のとおりです。

  • リアルタイム分析:集約により、ストリーミングデータを処理して、トレンドとパターンに関する即時の洞察を提供できます。たとえば、Webサイトのトラフィックをリアルタイムまたは監視センサーデータの追跡。これには、他のフィールドに基づいた合計、平均、または比率の計算が含まれる場合があります。
  • レポートとダッシュボード:レポートと視覚化のために要約されたデータを生成します。集約は、データをグループ化し、集約を計算し、結果を簡単に消費するためにフォーマットします。
  • データのクリーニングと変換:データをデータタイプや再構築ドキュメントの変換など、より使いやすい形式に変換します。オペレーター。いくつかの重要な戦略を次に示します。
    • インデックス作成: $ match $ sort $ group 、および $ lookup stagesで使用されているフィールドに適切なインデックスが作成されていることを確認します。インデックスはデータの検索を大幅に高速化します。
    • フィルタリング早期: pipelineの早い段階で $ match>ステージを使用して、できるだけ早く不要なドキュメントをフィルタリングします。これにより、後続の段階で処理されるデータの量が減少します。
    • 段階の数を制限します。可能であれば操作を統合してみてください。
    • 適切な集約演算子を使用してください。タスクの最も効率的な演算子を選択します。たとえば、 $ sum は、値を合計するために $削減よりも一般的に高速です。
    • 不要なフィールドの予測を避けます: $プロジェクトステージのみを投影して、データボリュームを減らすために必要なフィールドを投影します。結合コレクションには、Joinフィールドに適切なインデックスがあります。複雑な結合条件については、 $ lookup let let and pipeline を使用して
    • データセットを削減することを検討してください。 db.collection.aggregate(...)。説明()メソッドは実行計画を分析し、潜在的なボトルネックを識別します。

    mongodb集約フレームワークを使用して、他のコレクションの結合またはルックアップを実行できますか?

    $ 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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート