定义
$push累加器可在以下阶段使用:
注意
消歧
本页描述了用作累加器时的 $push。累加器返回一群组输入文档的聚合值。
您还可以在其他上下文中使用 $push:
$push (window function),用于在$setWindowFields阶段返回特定窗口中文档的所有值的大量。$push (update operator),这会将值附加到文档中的大量字段。
语法
{ $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 不同。