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

$setUnion(累加器操作符)

$setUnion

返回一群组文档中大量值中唯一元素的大量。

8.1版本新增。

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

注意

消歧

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

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

{ $setUnion: "<array field>" }

$setUnion 对数组执行设立操作,将数组视为集合。如果大量包含重复条目,$setUnion 将忽略重复条目。 $setUnion 忽略元素的顺序。

$setUnion 过滤掉结果中的重复项,以输出仅包含唯一条目的大量。输出大量中元素的顺序未指定。

如果设立包含嵌套大量元素,则 $setUnion 不会降级到嵌套大量,而是在顶层计算大量。

要了解 $setUnion 如何处理嵌套大量元素,请参阅 $setUnion (expression) 部分中的示例。

为 null 或解析为 null 的参数包含在结果中。结果不包含引用缺失字段的参数。

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

此示例使用 $setUnion 返回三位特定导演的不同类型:

db.movies.aggregate( [
{
$unwind: "$directors"
},
{
$match: {
directors: {
$in: [ "Christopher Nolan", "Sofia Coppola", "Spike Lee" ]
}
}
},
{
$group: {
_id: "$directors",
movieCount: { $sum: 1 },
genres: { $setUnion: "$genres" }
}
},
{
$sort: { _id: 1 }
}
] )

上述管道:

  • 使用 $unwind 为每个主管信用创建单独的文档。

  • 使用 $group 按导演群组,使用 $sum 对电影进行计数,并使用 $setUnion 将所有导演电影的 genres 数组组合成一个唯一类型的大量。

  • 使用 $sort 按导演姓名对结果进行排序。

  • $setUnion 仅支持数组和解析为大量的表达式。