对于 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 菜单

$last(累加器运算符)

$last

返回一组文档中最后一个文档的表达式结果。仅当文档按指定顺序排列时才有意义。

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

注意

消歧

本页描述了用作累加器时的 $last。累加器返回单个聚合值,例如一群组输入文档的总和、最大值或最小值。

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

{ $last: <expression> }

要在分组阶段为 $last 定义文档顺序,请在前面添加 $sort 阶段。

群组中的文档可能缺少字段。 $last 按如下方式处理缺失值:

  • 如果前一个管道阶段没有文档,则$group阶段将不返回任何内容。

  • 当群组中最后一份文档的 expression 计算结果为缺失值时,$last 会返回 null。

示例,考虑 badData集合中的以下文档,其中某些文档缺少字段:

db.badData.insertMany( [
{ "_id": 1, "price": 6, "quantity": 6 },
{ "_id": 2, "item": "album", "price": 5, "quantity": 5 },
{ "_id": 7, "item": "tape", "price": 6, "quantity": 6 },
{ "_id": 8, "price": 5, "quantity": 5 },
{ "_id": 9, "item": "album", "price": 3, "quantity": '' },
{ "_id": 10, "item": "tape", "price": 3, "quantity": 4 },
{ "_id": 12, "item": "cd", "price": 7 }
] )

查询 badData 集合,在 item 字段对输出进行分组:

db.badData.aggregate( [
{ $sort: { item: 1, price: 1 } },
{ $group:
{
_id: "$item",
inStock: { $last: "$quantity" }
}
}
] )

$last 从每个输出群组中选择最后一个文档。缺少 item字段的文档与 _id字段的 null 值分组在一起。当累加器字段缺失时(本示例中为 quantity),$last 将返回 null。

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

以下示例按年份和标题对电影进行排序,然后按类型进行分组,以查找每种类型最新发布的电影:

db.movies.aggregate( [
{ $match: { year: { $type: "int" } } },
{ $sort: { year: 1, title: 1 } },
{ $unwind: "$genres" },
{
$group: {
_id: "$genres",
lastMovieTitle: { $last: "$title" },
lastMovieYear: { $last: "$year" }
}
},
{ $sort: { _id: 1 } },
{ $limit: 5 }
] )

在前面的管道中:

  • $match 筛选具有整数 year字段的电影。这可以消除 year 缺失或不是数字的错误数据。

  • $sort 按 year 升序对电影排序,然后 title 按字母顺序排序。

  • $unwind 为 genres大量中的每个流派创建一个单独的文档,保持先前建立的排序顺序。

  • $group 和 $last 会返回每种类型的最后一部电影的 title 和 year(按年份最新,按标题字母顺序排列最后)。

  • 第二个 $sort 按类型的字母顺序对结果进行排序。

  • $limit 将输出限制为 5 类型。

给本页内容打分