对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs 菜单

$last(窗口函数)

$last

返回窗口中最后一个文档的表达式值。

注意

消歧

本页介绍了用作窗口函数的 $last。

您还可以在其他上下文中使用 $last:

{
$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 按年份、评级和标题对结果进行排序。

给本页内容打分