定义
注意
$maxN 的其他用途
本页介绍 $maxN 当作为 表达式 使用时,它从数组中返回最大的 n 值。
您还可以在这些其他上下文中使用 $maxN:
$maxN (accumulator),返回一个组中的最大n个值。$maxN (window function),用于在$setWindowFields阶段中返回某个窗口中文档的最大n值。
语法
{ $maxN: { n: <expression>, input: <expression> } }
字段 | 类型 | 说明 |
|---|---|---|
| 表达式(expression) | 指定要返回的元素数。必须解析为正整数。 |
| 表达式(expression) | 指定要从中返回最大 |
行为
$maxN使用过滤器过滤掉null值。如果
input数组包含的元素少于n个,$maxN返回该数组中的所有元素。如果
input解析为非数组值,则该操作将出错。如果
input同时包含数字和 string 元素,string 元素将在数字元素之前进行排序,具体取决于 BSON 比较顺序。
例子
本页上的示例使用来自 sample_mflix 数据集的数据。有关如何将此数据集加载到您的自管理 MongoDB 部署中的详细信息,请参阅 加载示例数据集。如果您对示例数据库进行了任何修改,您可能需要删除并重新创建数据库,才能运行此页面上的示例。
以下示例使用 $maxN 返回每部电影字母顺序最后的两个演员,存储在由 $addFields 创建的新 topTwoCast 字段中。
db.movies.aggregate( [ { $match: { title: { $in: [ "The Godfather", "Spirited Away", "The Dark Knight" ] } } }, { $addFields: { topTwoCast: { $maxN: { n: 2, input: "$cast" } } } }, { $project: { _id: 0, title: 1, cast: 1, topTwoCast: 1 } }, { $sort: { title: 1 } } ] )
前面的管道:
使用
$match作为过滤器,过滤出三部特定电影。使用
$addFields和$maxN创建一个名为topTwoCast的新字段,包含按字母顺序排列的最后两个值,来自cast数组的n: 2。使用
$project来在输出中仅包含title、cast和topTwoCast字段。使用 `
$sort` 按标题对结果进行排序。