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

$push(累加器运算符)

$push

返回对群组中的每个文档应用表达式所产生的所有值的大量。

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

注意

消歧

本页描述了用作累加器时的 $push。累加器返回一群组输入文档的聚合值。

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

{ $push: <expression> }

有关表达式的更多信息,请参阅表达式。

当您使用 $push 作为累加器时,进入管道的文档顺序决定了文档在输出大量中的顺序。为保证定义的顺序,请在 $group 阶段之前放置 $sort 阶段。

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

以下操作按导演对电影进行分组,并使用 $push累加器收集该导演执导的每部电影的主节点 (primary node in the replica set)类型。

db.movies.aggregate( [
{
$match: {
year: { $gte: 2010, $lte: 2015 },
genres: { $exists: true, $ne: [] },
directors: { $exists: true, $ne: [] }
}
},
{
$unwind: "$directors"
},
{
$group: {
_id: "$directors",
genres: { $push: { $first: "$genres" } }
}
},
{
$sort: { _id: 1 }
},
{
$limit: 5
}
] )

上述管道:

  • 使用 $match过滤出 2010-2015 之间具有类型和导演信息的电影。

  • 使用 $unwind 为 directors大量中的每个导演创建单独的文档。

  • 按导演对生成的文档进行分组,并使用 $push 收集每部电影的主节点 (primary node in the replica set)类型。

  • 按董事姓名的字母顺序对结果进行排序。

  • 将输出限制为五个导向器。

在输出中,A.R. Murugadoss 已将 Action 列出两次,因为他们执导了两部以 Action 为主节点 (primary node in the replica set)类型的电影。这表明 $push 包含重复值,与返回唯一值大量的 $addToSet 不同。

给本页内容打分