定義
ウィンドウ内の指定されたパーセンタイルのパーセンタイル値の配列を返します。
注意
曖昧さ回避
このページでは、ウィンドウ関数として使用する場合の$percentile について説明します。
次の他のコンテキストでは $percentile を使用することもできます。
$percentile (accumulator)は、入力ドキュメントのグループ全体のパーセンタイル値の集計と配列を返します。$percentile (expression)は、入力値の配列に対するパーセンタイル値を計算します。
構文
{ $setWindowFields: { ... output: { <field>: { $percentile: { input: <expression>, p: [ <expression1>, <expression2>, ... ], method: <string> }, } } } }
オプション
フィールド | タイプ | 説明 |
|---|---|---|
| 式 |
|
| 式 |
|
| 文字列 | MongoDB でパーセンタイル 値を計算するために使用される方法。メソッドは |
動作
$setWindowFields では、$percentile は各ドキュメントの結果を返しますが、結果はドキュメントのウィンドウに対して計算されます。
計算に関する考慮事項
ウィンドウ関数として使用する場合、$percentile は、method: 'approximate' が指定されている場合でも、近似値ではなく、常に正確なパーセンタイル計算アルゴリズムを使用します。
例
このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
次の例では、$percentile $setWindowFields10ステージで2002 を使用して、 から までの各年の IMDB 評価の上位 %2004 に含まれるアクション映画を検索します。
db.movies.aggregate( [ { $match: { year: { $in: [ 2002, 2003, 2004 ] }, genres: "Action", "imdb.votes": { $gte: 5000 }, } }, { $setWindowFields: { partitionBy: "$year", output: { top10PctRatingForYear: { $percentile: { input: "$imdb.rating", p: [ 0.9 ], method: "approximate" }, window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $match: { $expr: { $gte: [ "$imdb.rating", { $arrayElemAt: [ "$top10PctRatingForYear", 0 ] } ] } } }, { $project: { _id: 0, title: 1, year: 1, imdb_rating: "$imdb.rating", top10PctRatingForYear: 1 } }, { $sort: { year: 1, imdb_rating: -1 } } ] )
先行するパイプライン:
$match2002を使用して、 、2003 、または2004 にリリースされ、少なくとも5 、000 IMDB 投票権を持つアクション映画をフィルタリングします。$setWindowFieldsyearを使用して、 で映画を分割します。各パーティション内で、$percentile90演算子は、p: [0.9]と に保存されている無制限のウィンドウ を使用して、 パーセンタイルtop10PctRatingForYearIMDB 評価を計算します。$projecttitleを使用して、year、 、imdb_rating、top10PctRatingForYearフィールドを出力に含めます。$sortを使用して、結果を年の昇順、次に IMDB 評価の降順で並べ替えます。