MongoDB去重后求总数

错误的方法

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

db.user_info.distinct('email')

得到的是一个列表:

[
  "123@gmail.com",
  "456@gmail.com",
  "567@gmail.com",
  "890@aol.com"
]

然后获取长度

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
     }
   }
 }
)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值