定義
指定されたウィンドウ内のドキュメントから中央値(50 パーセンタイル)値を返します。 $median はドキュメントベースのウィンドウと範囲ベースのウィンドウの両方で使用できます。
注意
曖昧さ回避
このページでは、ウィンドウ関数として使用する場合の$median について説明します。
次の他のコンテキストでは $median を使用することもできます。
$median (accumulator)は、入力ドキュメントのグループ全体の中央値を返すためにグループ化で使用されます。$median (expression)は、値の配列の中央値を返します。
構文
{ $setWindowFields: { ... output: { <field>: { $median: { input: <expression>, method: <string> } } } } }
コマンドフィールド
フィールド | タイプ | 必要性 | 説明 |
|---|---|---|---|
| 式 | 必須 | 中央値が計算された値を返します。 |
| 文字列 | 必須 |
|
動作
計算に関する考慮事項
$median がウィンドウ関数として使用される場合、method: "approximate" が指定されている場合でも、近似値ではなく、常に正確なパーセンタイル計算アルゴリズムが使用されます。
例
このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
この例では、 を使用して、ドキュメント、アクション、アクション アクションの 3 つすべてに属する各映画の中央値 IMDb$setWindowFields 評価を計算します。ウィンドウは、前の年、同じ年、次の年にまたがります(範囲[ -1, 1 ] )。
db.movies.aggregate( [ { $match: { genres: { $all: ["Adventure", "Comedy", "Drama"] }, year: { $gte: 2000, $lte: 2005 } } }, { $setWindowFields: { sortBy: { year: 1 }, output: { medianRatingByYear: { $median: { input: "$imdb.rating", method: "approximate" }, window: { range: [ -1, 1 ] } } } } }, { $project: { _id: 0, title: 1, year: 1, genres: 1, "imdb.rating": 1, medianRatingByYear: 1 } }, { $sort: { year: 1, "imdb.rating": -1 } }, { $limit: 10 } ] )
上記のパイプラインでは、
$matchは、2000 から 2005 の間にリリースされた、チャレンジ 管理、CMK、アクション アクションの 3 つのすべてに該当する映画をフィルタリングします。は
$setWindowFieldsyearによって昇順でソートされ、$medianの範囲ベースのウィンドウで を適用します。各映画の[ -1, 1 ]medianRatingByYearは、その映画がimdb.rating1 年以内に公開された 3 ジャンルすべての映画の中央値 です。$projectには、title、year、genres、imdb.rating、medianRatingByYearフィールドのみが含まれます。$sortyearは結果を で昇順にソートし、次にimdb.ratingで降順にソートします。$limit読みやすくするために出力を 10 の結果に制限します。