distinct()(去重取值)
最后更新:2026-10-09
distinct()(去重取值)
distinct()返回集合中指定字段的所有不重复值,例如`db.users.distinct('address.city')`。它只返回去重后的值数组,不返回完整文档。常用于枚举分类、统计可选值等场景。注意:对没有索引的大字段去重可能性能较差,返回结果也受单个BSON文档16MB上限约束。
| 分类 | 读取 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
db.<集合>.distinct(<字段>, <过滤条件>)
⚙️ 参数
| 字段 | 要去重的字段名,支持点号路径如'address.city'。 |
|---|---|
| 过滤条件 | 可选。先按条件过滤再取值。 |
返回值:去重后的值数组;无匹配时为空数组。
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// distinct:列出所有用户所在的城市
const cities = db.users.distinct(
'address.city',
{ age: { $gt: 18 } }
)
cities
运行结果:
[ 'Beijing', 'Shanghai', 'Guangzhou' ]
📌 注意事项
- 返回的是值数组而不是计数,要统计数量用返回数组的length
- 嵌套字段用点号路径,如'address.city'
- 结果受16MB BSON文档大小限制,超大数据集建议用聚合管道
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Qdistinct和聚合里的$group去重有什么区别?
Adistinct()只返回去重值数组;聚合的$group可以同时做计数、求和等更多统计,能力更强。
Qdistinct能对嵌套字段去重吗?
A可以,字段名用点号路径,例如db.users.distinct('address.city')。
Qdistinct结果太多会报错吗?
A返回值超出16MB BSON限制会报错,此时改用聚合管道配合$group分批处理。