对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs 菜单

$firstN(窗口函数)

$firstN

返回一个大量,其中包含窗口中的前 n 个元素。

注意

消歧

本页介绍了用作窗口函数的 $firstN。

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

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

input

表达式(expression)

对窗口中的每个文档计算 input表达式,并保留前 n 结果。

n

表达式(expression)

$firstN 从窗口返回的元素数量。必须解析为正整数。

如果窗口包含的元素少于 n 个,$firstN 将返回窗口中的所有元素。

  • $firstN 不筛选空值。

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

本页上的示例使用 sample_mflix 数据集中的数据。有关如何将此数据集加载到自管理MongoDB 部署中的详细信息,请参阅加载样本数据集。如果对示例数据库进行了任何修改,则可能需要删除并重新创建数据库才能运行本页上的示例。

此示例使用 $setWindowFields 按 year 对电影进行分区,按 imdb.rating 降序对电影进行排序,并返回每年的前三部电影。每部电影还包含一个字段,显示当年上映的三部收视率最高的电影:

db.movies.aggregate( [
{
$match: {
year: { $in: [ 1999, 2000, 2001 ] },
"imdb.rating": { $gte: 8.5 }
}
},
{
$setWindowFields: {
partitionBy: "$year",
sortBy: { "imdb.rating": -1 },
output: {
topThreeMoviesInYear: {
$firstN: {
input: "$title",
n: 3
},
window: {
documents: [ "unbounded", "unbounded" ]
}
}
}
}
},
{
$project: {
_id: 0,
title: 1,
year: 1,
"imdb.rating": 1,
topThreeMoviesInYear: 1
}
},
{
$sort: { year: 1, "imdb.rating": -1 }
}
] )

上述管道:

  • 使用 $match 阶段过滤1999 和 2001 年之间发布的 IMDb 评分为 8.5 或更高的电影结果。

  • 使用 $setWindowFields 按 year 对电影进行分区,并按 imdb.rating 降序对它们进行排序。该阶段使用 $firstN 和 n: 3 从定义为 documents: [ "unbounded", "unbounded" ] 的窗口创建 topThreeMoviesInYear。

  • 使用 $project 可仅在输出中包含 title、year、imdb.rating 和 topThreeMoviesInYear 字段。

  • 使用 $sort 按年份和评级对结果进行排序。

给本页内容打分