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