目标

在 MongoDB 里统计某个字段在所有文档中出现过哪些不同的取值,本质就是 distinct(去重取值集合)。


方式 1:distinct(最直接)

db.collection.distinct("fieldName")

带过滤条件(可选)

db.collection.distinct("fieldName", { status: "ACTIVE" })

示例

假设集合 users 里有字段 city

db.users.distinct("city")

返回类似:

["Shanghai", "Beijing", "Shenzhen"]

适合:你只关心“有哪些值”,不关心每个值出现多少次。


方式 2:聚合 group(还能顺便统计每个值的数量)

db.collection.aggregate([
  { $group: { _id: "$fieldName" } }
])

想按数量排序并输出数量

db.collection.aggregate([
  { $group: { _id: "$fieldName", count: { $sum: 1 } } },
  { $sort: { count: -1 } }
])

示例

统计 users.city 的不同取值以及出现次数: