定义
返回一个包含窗口中最后 n 元素的大量。
语法
{ $setWindowFields: { ... output: { <field>: { $lastN: { input: <expression>, n: <expression> } } } } }
选项
字段 | 类型 | 说明 |
|---|---|---|
| 表达式(expression) | 对窗口中的每个文档计算 |
| 表达式(expression) |
如果窗口包含的元素少于 |
行为
$lastN 对 null 值和缺失值有以下行为:
$lastN不筛选空值。$lastN将缺失值转换为空。
例子
本页上的示例使用 sample_mflix 数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载样本数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。
此示例使用 $setWindowFields 按 year 对电影进行分区,按 imdb.rating 降序对电影进行排序,并返回每年评分最低的三部电影。
db.movies.aggregate( [ { $match: { year: { $in: [ 1979, 1985, 1992 ] }, "imdb.rating": { $lte: 4.5, $gt: 0 } } }, { $setWindowFields: { partitionBy: "$year", sortBy: { "imdb.rating": -1, "title": 1 }, output: { lowestRatedThreeMoviesInYear: { $lastN: { input: "$title", n: 3 }, window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $project: { _id: 0, title: 1, year: 1, "imdb.rating": 1, lowestRatedThreeMoviesInYear: 1 } }, { $sort: { year: 1, "imdb.rating": -1, "title": 1 } } ] )
上述管道:
使用
$match阶段过滤在 1979、1985 和 1992 发布且 IMDb 评分为 4.5 或更低的电影结果。使用
$setWindowFields按year对电影进行分区,并按imdb.rating降序对电影进行排序,其中title作为决胜局。该阶段使用$lastN和n: 3从定义为documents: [ "unbounded", "unbounded" ]的窗口创建lowestRatedThreeMoviesInYear。使用
$project可仅在输出中包含title、year、imdb.rating和lowestRatedThreeMoviesInYear字段。使用
$sort按年份、评级和标题对结果进行排序。