MongoDB $setUnion 运算符介绍
$setUnion
是 MongoDB 中的一个聚合运算符,用于将两个数组合并成一个数组,同时去重。
语法
$setUnion
的语法如下:
{ $setUnion: [ <array1>, <array2>, ... ] }
其中,<array1>
和 <array2>
是需要合并的数组。
使用场景
$setUnion
可以应用在需要将两个数组合并成一个且去除重复项的场景中,例如:
- 合并多个标签数组为一个唯一的标签列表;
- 将两个用户的好友列表合并成一个唯一的好友列表。
示例
假设我们有一个存储用户数据的 users
集合,其中每个文档包含以下字段:
{
"_id" : ObjectId("61f3c8e1572a6a846a6a5f0f"),
"name" : "Alice",
"hobbies" : [ "reading", "dancing", "travelling" ]
}
现在,我们想要查询所有用户的兴趣爱好,以及一个唯一的兴趣爱好列表。我们可以使用以下聚合管道:
db.users.aggregate([
{
$group: {
_id: null,
hobbies: { $push: "$hobbies" }
}
},
{
$project: {
_id: 0,
hobbies: {
$reduce: {
input: "$hobbies",
initialValue: [],
in: { $setUnion: "$$value" }
}
}
}
}
])
在上述聚合管道中,我们首先使用 $group
将所有用户的兴趣爱好放到一个数组中,然后使用 $reduce
和 $setUnion
将这些数组合并成一个唯一的兴趣爱好列表。
以下是示例数据和结果:
示例数据:
_id |
name |
hobbies |
---|---|---|
ObjectId(“61f3c8e1572a6a846a6a5f0f”) | Alice | [“reading”, “dancing”, “travelling”] |
ObjectId(“61f3c8e2572a6a846a6a5f10”) | Bob | [“reading”, “painting”] |
ObjectId(“61f3c8e3572a6a846a6a5f11”) | Carol | [“travelling”, “cooking”] |
聚合结果:
{ "hobbies" : [ "reading", "dancing", "travelling", "painting", "cooking" ] }
结论
$setUnion
运算符是一个非常有用的聚合运算符,可以将多个数组合并成一个唯一的数组。它可以应用于许多场景,例如合并多个标签数组,合并多个好友列表等。