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