定義
$medianバージョン7.0の新機能。
グループ内のドキュメントの 中央値 (50 パーセンタイル) の近似値が返されます。
$median アキュムレータは次のステージで使用可能です。
注意
曖昧さ回避
このページでは、$median をアキュムレータとして使用する場合について説明します。アキュムレータは、入力ドキュメントのグループ全体で集計値を返します。
$median は、これらの他のコンテキストでも使用できます。
$median (expression), 1 つのドキュメント内の値の配列の中央値を返します。$median (window function)は、$setWindowFieldsステージで使用され、ウィンドウ内のドキュメントから中央値を返します。
構文
{ $median: { input: <number>, method: <string> }}コマンドフィールド
$percentile は、次のフィールドがあります。
フィールド | タイプ | 必要性 | 説明 |
|---|---|---|---|
| 式 | 必須 |
|
| 文字列 | 必須 |
|
動作
アキュムレータとして使用する場合、$median:
グループ内のすべてのドキュメントに対して 1 つの結果を計算します。
近似パーセンタイルの計算に t-digest アルゴリズムを使用します。限られたサイズのデータ構造を使用して中央値を計算するには、近似が必要です。
計算に関する考慮事項
アキュムレータとして使用される場合、$median は常に近似アルゴリズムを使用します。その結果、t-digest 近似アルゴリズムにおける偽ランダム性のため、同じデータセットに対して計算されたパーセンタイル $median が返す値は、各実行するで異なる可能性があります。さらに、$median は正確な統計的中央値とは若干異なる値を返す可能性があります。
例
このページの例では、sample_mflix データセット のデータを使用しています。自己管理型 MongoDB 配置にこのデータセットをロードする方法の詳細については、「サンプル データセットのロード」を参照してください。サンプル データベースに何らかの変更を加えた場合は、今ページの例を実行するには、データベースを削除して再作成する必要がある可能性があります。
次の例では、$median を使用して、2000 年から 2004 年までのアクション映画の IMDb レーティングの中央値を年度ごとに計算します。
db.movies.aggregate( [ { $match: { genres: "Action", year: { $gte: 2000, $lte: 2004 }, "imdb.rating": { $gt: 0 } } }, { $group: { _id: "$year", medianRating: { $median: { input: "$imdb.rating", method: "approximate" } } } }, { $sort: { _id: 1 } }] )上記のパイプラインでは、