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