定义
返回窗口中最后一个文档的表达式值。
注意
消歧
本页介绍了用作窗口函数的 $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 } } ] )
在前面的管道中:
$match筛选在 1999 和 2001 之间上映且 IMDb 评分为 3.5 或更低的电影。$setWindowFields按year对电影进行分区,并按imdb.rating降序排序,其中title作为决胜局。该阶段使用$last和定义为documents: [ "unbounded", "unbounded" ]的窗口来返回每年分区中收视率最低的电影的标题。$project在输出中仅包括title、year、imdb.rating和lowestRatedMovieInYear。$sort按年份、评级和标题对结果进行排序。