定義
$percentileバージョン7.0の新機能。
指定パーセンタイル値に対応するスカラー値の配列を返します。
次のステージで使用可能:
注意
曖昧さ回避
このページでは、
$percentileをアキュムレータとして使用する場合について説明します。アキュムレータは、入力ドキュメントのグループ全体で集計値を返します。$percentileは、これらの他のコンテキストでも使用できます。$percentile (expression)、入力値の配列におけるパーセンタイル値を計算します。$percentile (window function)は、特定のウィンドウのドキュメントに対してパーセンタイル値の配列を返すために、$setWindowFieldsステージで使用されます。
構文
{ $percentile: { input: <expression>, p: [ <expression1>, <expression2>, ... ], method: <string> }}オプション
$percentile は、次のフィールドがあります。
フィールド | タイプ | 必要性 | 説明 |
|---|---|---|---|
| 式 | 必須 |
|
| 式 | 必須 |
|
| 文字列 | 必須 | MongoDB がパーセンタイル値を計算するために使用する方法。メソッドは |
動作
アキュムレータとして使用する場合、$percentile:
グループ内のすべてのドキュメントで集計された、グループごとに1つのパーセンタイルセットを計算します。
近似パーセンタイルの計算に t-digest アルゴリズムを使用します。制限されたサイズのデータ構造を使用してパーセンタイルを計算するには、近似が必要です。
計算に関する考慮事項
アキュムレータとして使用される場合、$percentile は常に近似アルゴリズムを使用します。t-digest 近似アルゴリズムにおける拟似ランダム性のため、同じデータセット上で計算されたパーセンタイル値は、実行するたびに異なる可能性があります。さらに、$percentile は正確な統計的パーセンタイルから若干異なる値を返す可能性があります。
例
このページの例では、sample_mflix データセット のデータを使用しています。自己管理型 MongoDB 配置にこのデータセットをロードする方法の詳細については、「サンプル データセットのロード」を参照してください。サンプル データベースに何らかの変更を加えた場合は、今ページの例を実行するには、データベースを削除して再作成する必要がある可能性があります。
ジャンル別の評価パーセンタイルを計算する
次の例では、$percentile アキュムレータを使用して、ActionジャンルとDramaジャンルの映画について、50パーセンタイルと90パーセンタイルの IMDB 評価を計算します。
db.movies.aggregate( [ { $unwind: "$genres" }, { $match: { genres: { $in: [ "Action", "Drama" ] }, "imdb.rating": { $exists: true } } }, { $group: { _id: "$genres", ratingPercentiles: { $percentile: { input: "$imdb.rating", p: [ 0.5, 0.9 ], method: "approximate" } } } }, { $sort: { _id: 1 } }] )以前のパイプライン:
$unwindを使用して、genres配列内の各ジャンルに個別のドキュメントを作成します。$matchを使用して、ActionまたはDramaに分類され、IMDB 評価フィールドを持つ映画をフィルターします。映画をジャンル別にグループ化する。
p: [0.5, 0.9]とともに、$percentileを使用して各ジャンルの50パーセンタイルと90パーセンタイルのIMDB評価を計算します。$sortを使用して、ジャンル名で出力に順序を付けます。
出力 ratingPercentiles 配列には、各ジャンルの 50 パーセンタイルと 90 パーセンタイルの IMDB 評価の 2 つの値が含まれています。