定义
返回一个大量,其中包含窗口内最多 n 个元素。
语法
{ $setWindowFields: { ... output: { <field>: { $maxN: { input: <expression>, n: <expression> }, window: { documents: [ <lower boundary>, <upper boundary> ] } } } } }
选项
字段 | 类型 | 说明 |
|---|---|---|
| 表达式(expression) | 表达式对窗口中的每个文档进行计算。 |
| 表达式(expression) |
如果窗口包含的元素少于 |
行为
Null 和缺失值
$maxN 过滤掉空值和缺失值。
例子
本页上的示例使用 sample_mflix 数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载样本数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。
此示例使用 $setWindowFields 中的 $maxN 返回每年评分最高的三部电影。该窗口跨越整个分区,因此同一年的每个文档都会收到相同的 topThreeRatedInYear 值。
db.movies.aggregate( [ { $match: { year: { $in: [ 1999, 2001 ] }, "imdb.rating": { $gte: 8.5 } } }, { $setWindowFields: { partitionBy: "$year", sortBy: { "imdb.rating": -1 }, output: { topThreeRatedInYear: { $maxN: { input: [ "$imdb.rating", "$title" ], n: 3 }, window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $project: { _id: 0, title: 1, year: 1, "imdb.rating": 1, topThreeRatedInYear: 1 } }, { $sort: { year: 1, "imdb.rating": -1 } } ] )
上述管道: