$addToSet(去重数组累加器)
最后更新:2026-10-09
$addToSet(去重数组累加器)
$addToSet 是累加器,在 $group 中把组内文档的表达式结果加入数组并自动去重,重复值只保留一个。与 $push 类似但保证元素唯一。适合收集分类标签、客户列表等需要去重的数据。数组元素顺序不保证。
| 分类 | 累加器 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $group: { _id: <键>, tags: { $addToSet: "$字段" } } }
返回值:去重后的表达式结果数组
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $addToSet:收集每位客户买过的不同商品
db.orders.aggregate([
{ $group: { _id: '$cust_id', items: { $addToSet: '$item' } } }
])
运行结果:
{ "_id": "A123", "items": ["Pen", "Book"] }
📌 注意事项
- 元素唯一,重复值只保留一个
- 顺序不保证,需要稳定顺序可自行排序
- 按 BSON 值相等判断去重(同类型同值)
🏷️ 相关标签
💡 相关案例
📚 相关教程
❓ 常见问题
Q$addToSet 和 $push 有什么区别?
A$push 保留重复,$addToSet 去重。
Q顺序有保证吗?
A没有,数组元素顺序不保证,需要顺序要自行排序。
Q能对数组字段元素去重吗?
A不能直接对数组元素去重,$addToSet 按整个数组值比较;想展平先 $unwind。