对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。

$firstN(累加器运算符)

$firstN

返回群组内前 n 个元素的聚合。结果仅在分组阶段的输入数据具有定义的排序顺序时才有意义。如果该组包含的元素少于 n 个,$firstN 返回该组中的所有元素。

$firstN 累加器可在以下阶段使用:

注意

消歧

本页介绍了 $firstN 用作 累加器 时的情况。累加器对一组输入文档返回单个聚合值,如总和、最大值或最小值。

您还可以在这些其他上下文中使用 $firstN:

{ $firstN: { input: <expression>, n: <expression> }}
字段
类型
说明

input

表达式(expression)

input 表达式将对输入组中的每个文档进行计算,并且前 n 个结果将得以保留。

n

表达式(expression)

$firstN 从组中返回的元素数量。有关根据组键动态设置 n 的示例,请参阅 根据组键设置 n。

  • $firstN 不筛选空值。

  • $firstN 将缺失值转换为空。

$firstN和$topN累加器都可以实现类似的结果。

一般来说:

  • 如果进入$group的文档已经排序,则应使用$firstN 。

  • 如果您要排序并选择顶部的 n 元素,则可以使用 $topN 通过一个累加器完成这两项任务。

此页上的示例使用了 sample_mflix 示例数据集中的 movies 集合。要了解如何将示例数据集加载到您的 MongoDB 部署中,请参阅 将示例数据导入到您的 Atlas 部署中。

可以使用 $firstN 累加器查找单一类型中的前三部电影。

db.movies.aggregate( [ { $match: { genres: "Horror" } }, { $sort: { year: 1 } }, { $group: { _id: "Horror", firstThreeMovies: { $firstN: { input: [ "$title", "$year" ], n: 3 } } } }] )

前面的管道:

  • 使用 $match 过滤器结果,以查找 Horror 包含在 genres 数组中的电影。

  • 按 year 升序对结果进行排序。

  • 将所有结果文档分组为单一组。

  • 指定使用input : ["$title", "$year"]为$firstN输入的字段。

  • 使用 $firstN 返回具有 n: 3 的 Horror 类型的前三个文档。

可以使用 $firstN 累加器查找每个类型中的前 n 个输入字段。

db.movies.aggregate( [ { $unwind: "$genres" }, { $sort: { year: 1 } }, { $group: { _id: "$genres", movies: { $firstN: { input: [ "$title", "$year" ], n: 3 } } } }, { $sort: { _id: 1 } }, { $limit: 5 }] )

前面的管道:

  • 使用 $unwind 在 genres 数组中针对每个流派创建单独的文档。

  • 按 year 升序对结果进行排序。

  • 使用 $group 按 genres 对结果进行分组。

  • 使用 $firstN 返回每个具有 n: 3 的类型的前三个文档。

  • 指定使用input : ["$title", "$year"]为$firstN输入的字段。

  • 将输出限制为五份文档,以提高可读性。

您可以根据组密钥动态地赋值 n 的值。在此示例中,$cond 表达式使用 rated 字段更改 n 的值:

db.movies.aggregate([ { $match: { rated: { $in: ["G", "PG", "PG-13", "R"] } } }, { $sort: { title: 1 } }, { $group: { _id: {"rated": "$rated"}, movies: { $firstN: { input: "$title", n: { $cond: { if: { $eq: ["$rated", "PG"] }, then: 3, else: 1 } } } } } }] )

前面的管道:

  • 过滤器,用于显示评分为 G、PG、PG-13 或 R 的电影。

  • 对结果按 title 进行字母顺序排序。

  • 按 rated (电影评级) 对电影进行分组。

  • 使用 $cond 表达式,对于 PG 级别的电影,返回 3 部电影;对于所有其他级别,返回 1 部电影。

在输出中,PG 评级返回 3 部电影,而 G、PG-13 和 R 评级则各自返回 1 部电影。

给本页内容打分