定義
特定のウィンドウ内のドキュメントから最大値を返します。
注意
曖昧さ回避
このページでは、ウィンドウ関数として使用する場合の$max について説明します。
次の他のコンテキストでは $max を使用することもできます。
$max (accumulator)は、入力ドキュメントのグループ全体で最大値を返します。$max (expression)は、配列または値のリストから最大値を返します。
構文
{ $setWindowFields: { ... output: { <field>: { $max: <expression> } } } }
動作
結果の型
$max は、 BSON比較 の順序に従って入力データを比較し、適切な出力型を決定します。 入力データに複数のデータ型が含まれている場合、 $maxの出力型が比較順序では最も高い値になります。
NULL および欠損値
nullウィンドウ内の一部のドキュメントで、フィールドの 値がであるか、フィールドが欠落している場合、$min はそれらを無視します。 null 以外と欠落値以外の値のみを考慮します。
nullウィンドウ内のすべてのドキュメントで、フィールドの値が であるか、フィールドが欠落している場合、$min はnull を返します。
配列オペランド
$setWindowFieldsステージでは、式の式が配列となる場合、$max は配列をトラバースせず、配列全体として比較します。
例
このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
この例では、$max $setWindowFieldsステージで1999 を使用して、 と の高評価映画の最高の IMDb2000 評価を出力します。映画ごとに、パイプラインはその年のすべての映画で最高の IMDb 評価を含むフィールドを追加します。
db.movies.aggregate( [ { $match: { year: { $in: [ 1999, 2000 ] }, "imdb.rating": { $gte: 8.5 } } }, { $setWindowFields: { partitionBy: "$year", sortBy: { "imdb.rating": 1 }, output: { highestRatingInYear: { $max: "$imdb.rating", window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $project: { _id: 0, title: 1, year: 1, "imdb.rating": 1, highestRatingInYear: 1 } }, { $sort: { year: 1, "imdb.rating": 1 } } ] )
上記のパイプラインでは、
$matchは、 IMDb 評価が 8.5 以上の 1999 と 2000 の映画をフィルタリングします。$setWindowFieldsyearimdb.ratingは映画を で分割し、各パーティション内で昇順に でソートします。$maxウィンドウ関数は、パーティション全体にまたがるunboundedの下限と上限を持つドキュメントウィンドウを使用します。$maximdb.ratingは、各年のパーティション内のすべてのドキュメントで最高の を返します。は出力を
$projecttitle、 、 、および計算されたyearimdb.ratinghighestRatingInYearフィールドに制限します。$sortは、結果を年ごとに並べ替え、次に IMDb 評価の昇順で結果を並べ替えます。