定义
返回特定窗口中文档的最大值。
注意
消歧
本页介绍了用作窗口函数的 $max。
您还可以在其他上下文中使用 $max:
$max (accumulator),返回一群组输入文档中的最大值。$max (expression),返回大量或值列表中的最大值。
语法
{ $setWindowFields: { ... output: { <field>: { $max: <expression> } } } }
行为
结果类型
$max 按照BSON比较顺序比较输入数据,以确定适当的输出类型。 当输入数据包含多种数据类型时, $max输出类型是比较顺序中最高的类型。
Null 和缺失值
如果窗口中的部分(而非全部)文档具有该字段的 null 值或缺少该字段,则 $min 会忽略它们。它仅考虑非空值和非缺失值。
如果窗口中的所有文档都具有该字段的 null 值或缺少该字段,则 $min 返回 null。
数组操作数
在 $setWindowFields 阶段,如果表达式解析为大量,$max 不会遍历大量,而是将大量作为一个整体进行比较。
例子
本页上的示例使用 sample_mflix 数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载样本数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。
此示例在 $setWindowFields 阶段使用 $max 输出 1999 和 2000 中评分较高的电影的最高 IMDb 评分。对于每部电影,该管道都会添加一个字段,其中包含当年所有电影的最高 IMDb 评级:
db.movies.aggregate( [ { $match: { year: { $in: [ 1999, 2000 ] }, "imdb.rating": { $gte: 8.5 } } }, { $setWindowFields: { partitionBy: "$year", sortBy: { "imdb.rating": 1 }, output: { highestRatingInYear: { $max: "$imdb.rating", window: { documents: [ "unbounded", "unbounded" ] } } } } }, { $project: { _id: 0, title: 1, year: 1, "imdb.rating": 1, highestRatingInYear: 1 } }, { $sort: { year: 1, "imdb.rating": 1 } } ] )
在前面的管道中:
$match筛选来自 1999 和 2000、IMDb 评分为 8.5 或更高的电影。$setWindowFields按year对电影进行分区,并在每个分区内按imdb.rating升序对电影进行排序。$max窗口函数使用具有unbounded下限和上限且跨越整个分区的文档窗口。$max会返回每年分区中所有文档中最高的imdb.rating。$project将输出限制为title、year、imdb.rating和计算出的highestRatingInYear字段。$sort按年份排序结果,然后按 IMDb 评级升序排列。