mongo中的⾼级查询之聚合操作(distinct,count,group)与数
据去重
Mongodb中⾃带的基本聚合函数有三种:count、distinct和group。下⾯我们分别来讲述⼀下这三个基本聚合函数。
(1)count
作⽤:简单统计集合中符合某种条件的⽂档数量。
distinct和distinctive使⽤⽅式:unt(<query>)或者db.collection.find(<query>).count()
参数说明:其中<query>是⽤于查询的⽬标条件。如果出了想限定查出来的最⼤⽂档数,或者想统计后跳过指定条数的⽂档,则还需要借助于limit,skip。
举例:
(2)distinct
作⽤:⽤于对集合中的⽂档针进⾏去重处理
使⽤⽅式:db,collection.distinct(field,query)
参数说明:field是去重字段,可以是单个的字段名,也可以是嵌套的字段名;query是查询条件,可以为空;
举例:
除了上⾯的⽤法外,还可以使⽤下⾯的另外⼀种⽅法:
db.runCommand({"distinct":"collectionname","key":"distinctfied","query":<query>})
collectionname:去重统计的集合名,distinctfield:去重字段,,<query>是可选的限制条件;
举例:
image
这两种⽅式的区别:第⼀种⽅法是对第⼆种⽅法的封装,第⼀种只返回去重统计后的字段值集合,但第⼆种⽅式既返回字段值集合也返回统计时的细节信息。
(3)group
finalize:可选参数,可以简单理解为对分组之后的结果的再次处理,doc表⽰group之后的⽂档对象(这⼀步也是⼀个循环体
condition:可选参数,对已经分组好的结果进⾏过滤,有点类似于mysql中的having
4.mapReduce:暂缺,要想玩转这个⽅法需要有很强的JavaScript功能。
据说mapReduce 可以实现很复杂的查询,可以将⼀个复杂的查询分拆到多个机器上运⾏,
然后把各个结果集组合起来,形成最终结果。但是很慢。
mapreduce⽤法⼤全
mapreduce性能调优
数组中去除重复值⽰例
5.db.runCommand的相关命令.
db.runCommand({distinct:"consumerecords",key:"userId"}):键值去重 类似于mysql中的 select distinct userId from consumerecords
db.runCommand({distinct:"consumerecords",key:"userId"}).values.length:去重之后求记录数,类似于mysql中的 select count(distinct userId) from consumerecords
db.runCommand({distinct:"consumerecords",key:"userId",query:{act:"charge"}}):去重之后求记录数,类似于mysql中的 select distinct userId from consumerecords where act="charge"
db.runCommand(
... {
... group:
... {
... ns:"test2", # 集合名
... key:{iname:true}, # 分组字段
... initial:{dd:0}, # 按照来初始化该值
... reduce之后 ,function返回的值
... {
... prev.dd=doc.iage+prev.dd #
... }
...
... }
... }
... )
数值以字符串形式存储的解决⽅案:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。