MongoDB去重后求总数

错误的方法

我们要获取唯一的电子邮箱,使用到 distinct, 例如

db.user_info.distinct('email')

得到的是一个列表:

[
  "[email protected]",
  "[email protected]",
  "[email protected]",
  "[email protected]"
]

然后获取长度

db.user_info.distinct('email').length

设想一下,我们如果有15,000,000记录,我们要生成一个庞大的列表,然后仅仅是获取一个总数,我们值得这样做吗?

正确的方法

使用MongoDB的aggregate
语法:
db.集合名称.aggregate({管道:{表达式}}, {管道:{表达式}}...)
db.collection.aggregate(pipeline, options)

$group:将集合中的文档分组,可用于统计结果
$sum: 1 满足一条就加1, 也就是count是 group中 每个email的数量
先分组,然后再从分组中计算总数。

db.user_info.aggregate(
 {
   $group: {
     _id: '$email'
   }
 },
 {
   $group: {
     _id: 1,
     count: {
       $sum: 1
     }
   }
 }
)

你可能感兴趣的:(MongoDB)