如何在Mongodb集合中统计去重之后的数据

Mongodb使用知识点记录 专栏收录该内容
24 篇文章 20 订阅
比方说我们有个Mongodb集合,


以这个简单的集合为例,我们需要集合中包含多少不同的手机号码,首先想到的应该就是使用distinct关键字,

db.tokencaller.distinct('Caller').length

如果想查看具体的而不同的手机号码,那么可以省略后面的length属性,因为db.tokencaller.distinct('Caller')返回的是由所有去重手机号码组成的数组。



但是,这种方式对于所有情况都是满足的嘛?并不如此,如果要统计的集合记录数较大,如千万级别的,那么在这么统计的时候往往会报10044错误,提示信息“exception : distinct too big , 16mb cap”. 后面我们将通过其他方式进行解决。

另外一种方式可以使用runCommand结合distinct进行使用,

db.runCommand({"distinct":"tokencaller","key":"Caller"})



可见在values上显示了去重之后的手机号码,,看结果是一个Json格式的,于是尝试了下看看能不能取出values的大小,因为如果对于大数据量的集合来说,直接显示去重的号码明显不合适,于是尝试了下面的写法:



发现是可以的,于是对大数据量使用了这种方式看看是否能取出结果,发现不存在length属性,想了想应该跟mongodb的客户端版本有关系吧,还待验证!!!

两种方式都不行,于是试了下mapReduce方式,具体如下:



然后我们会发现,他会将查询出来的结果输出到一个称为“callerstatis”的结合,如下所示:



然后使用db.callerstatis.count()就可以知道有多少不同的手机号码了。

使用这种方式,我们同样在大数据量的集合上试了一下,可惜还是失败了!!!!(桑心T_T),如果有谁有好的方法,麻烦也告诉我一下,小的感激不尽啊^_^

如果您对我的技术专栏文章感兴趣并支持我继续深入的写下去,您可以扫码支持我,毕竟英雄惜英雄嘛,不管多少我都真心的感谢您,毕竟都是对我劳动成果的认可,谢谢(^_^)。。。


  • 1
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

打赏
文章很值,打赏犒劳作者一下
相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页

打赏

DreamMakers

您的肯定是我坚持的最大动力。

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值