定義
ウィンドウ内の最大の n 要素を含む配列を返します。
注意
$maxN のその他の用途
このページでは、ウィンドウ関数として使用する場合の$maxN について説明します。
次の他のコンテキストでは $maxN を使用することもできます。
$maxN (accumulator)は、グループ内の最大n値を返します。$maxN (expression)は、配列から最大のn値を返します。
構文
{ $setWindowFields: { ... output: { <field>: { $maxN: { input: <expression>, n: <expression> }, window: { documents: [ <lower boundary>, <upper boundary> ] } } } } }
オプション
フィールド | タイプ | 説明 |
|---|---|---|
| 式 | 式はウィンドウ内の各ドキュメントに対して評価されます。 |
| 式 |
ウィンドウに含まれる要素が |
動作
NULL および欠損値
$maxN は null 値と欠損値を除外します。
例
このページの例では、 sample_mflix データセット のデータを使用します。このデータセットを自己管理型MongoDBデプロイにロードする 方法の詳細については、「 サンプル データセットをロードする 」を参照してください。サンプルデータベースに変更を加えた場合、このページの例を実行するには、データベースを削除して再作成する必要がある場合があります。
この例では、$maxN の$setWindowFields を使用して、各年の最高評価の 3 つの映画を返します。ウィンドウはパーティション全体にまたがるため、同じ年のすべてのドキュメントに同じtopThreeRatedInYear 値が与えられます。
db.movies.aggregate( [ { $match: { year: { $in: [ 1999, 2001 ] }, "imdb.rating": { $gte: 8.5 } } }, { $setWindowFields: { partitionBy: "$year", sortBy: { "imdb.rating": -1 }, output: { topThreeRatedInYear: { $maxN: { input: [ "$imdb.rating", "$title" ], n: 3 }, window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $project: { _id: 0, title: 1, year: 1, "imdb.rating": 1, topThreeRatedInYear: 1 } }, { $sort: { year: 1, "imdb.rating": -1 } } ] )
先行するパイプライン:
を使用して、
$match19992001または8.5にリリースされ、 IMDb 評価が 以上の映画をフィルタリングします。$setWindowFieldsを使用して、映画を で分割し、yearimdb.ratingで降順にソートします。ステージでは、$maxNとn: 3topThreeRatedInYearを使用して、パーティション全体(documents: ["unbounded", "unbounded"])のウィンドウから を作成します。出力に
$projecttitleyear、 、imdb.rating、 フィールドのみを含めるには、 を使用します。topThreeRatedInYear$sortを使用して、結果を年の昇順と評価の降順で並べ替えます。