Mongodb 集約フレームワークの説明 質問する

Mongodb 集約フレームワークの説明 質問する

MongoDB の Aggregation フレームワークの説明関数はありますか? ドキュメントには記載されていません。

そうでない場合、集計フレームワーク内でクエリがどのように実行されるかを確認する他の方法はありますか?

私はあなたがただ見つけることを知っています

db.collection.find().explain()

しかし、集約フレームワークではエラーが発生します

db.collection.aggregate(
    { $project : { "Tags._id" : 1 }},
    { $unwind : "$Tags" },
    { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
    { 
        $group: 
        { 
            _id : { id: "$_id"},
            "count": { $sum:1 } 
        }
    },
    { $sort: {"count":-1}}
).explain()

ベストアンサー1

MongoDBバージョン3.0以降では、

collection.aggregate(...).explain()

collection.explain().aggregate(...)

望ましい結果が得られます(ドキュメントここ)。

2.6以上の古いバージョンの場合は、explain集約パイプライン操作のオプション

explain:true

db.collection.aggregate([
    { $project : { "Tags._id" : 1 }},
    { $unwind : "$Tags" },
    { $match: {$or: [{"Tags._id":"tag1"},{"Tags._id":"tag2"}]}},
    { $group: { 
        _id : "$_id",
        count: { $sum:1 } 
    }},
    {$sort: {"count":-1}}
  ],
  {
    explain:true
  }
)

集約フレームワークに関する重要な考慮事項は、インデックスはパイプラインの初期データ(パイプラインの開始時に、、を使用するなど)と後続の$matchステージ$sortおよびステージを取得するためにのみ使用できるということです。データが処理のために集約パイプラインに取得されると(、、、などのステージを通過するなど)、それ以降の操作はメモリ内で行われます(オプションが設定されている場合は一時ファイルを使用する可能性があります)。$geonear$lookup$graphLookup$project$unwind$groupallowDiskUse

パイプラインの最適化

一般に、集約パイプラインは次の方法で最適化できます。

  • $match関連するドキュメントへの処理を制限するステージでパイプラインを開始します。
  • 初期段階$match$sortサポートされることを確認する効率的なインデックス
  • $match、、$limitおよびを使用してデータを早期にフィルタリングします$skip
  • 不要なステージとドキュメント操作を最小限に抑えます (複雑な集約操作が必要な場合は、スキーマを再検討する必要があるかもしれません)。
  • MongoDBサーバーをアップグレードした場合は、新しい集計演算子を活用しましょう。たとえば、MongoDB 3.4では多くの新しい集計ステージと表現配列、文字列、ファセットの操作のサポートが含まれます。

また、集約パイプラインの最適化これらは、MongoDB サーバーのバージョンに応じて自動的に実行されます。たとえば、出力結果に影響を与えずに実行を改善するために、隣接するステージが結合されたり、順序が変更されたりすることがあります。

制限事項

MongoDB 3.4では、Aggregation Frameworkexplainオプションはパイプラインの処理方法に関する情報を提供しますが、クエリexecutionStatsのモードと同じレベルの詳細をサポートしていません。最初のクエリ実行の最適化に重点を置いている場合は、同等のクエリを次のようfind()に確認すると役立つでしょう。find().explain()executionStatsまたはallPlansExecution冗長

MongoDB の問題追跡システムには、集約パイプラインの最適化/プロファイル作成に役立つ、より詳細な実行統計に関する、注目/賛成するべき機能リクエストがいくつかあります。

おすすめ記事