mongodb--group聚合运算

  1. mongodb本质就是要做一个高性能,能简单则简单,不要把mongodb中的运算做的太复杂
  2. count 最简单的一个聚合方法
  3. distinct 选择结果中剔除重复的一个键值, 跟sql语句的效果是一样的
   db.person.distinct("age")
  1. group 【能不用则不用】 sql的group by
    有点像 “AOP“ 编程
db.person.group({ 
"key":{age:1}, 
initial:{count:0}, 
reduce:function(current,aggr){aggr.count++} 
})

db.person.group({ 
... "key":{age:1}, 
... initial:{count:0}, 
... reduce:function(current,aggr){aggr.count++} 
... })
[
    {
        "age" : 26,
        "count" : 2
    },
    {
        "age" : 29,
        "count" : 2
    },
    {
        "age" : 31,
        "count" : 2
    }
]
{age:26,count:2}
{age:29,count:2}
{age:31,count:2}

再复杂一点:
cond:我们踢掉小于28的数据,那么这时候就只有两个结果了。。。

db.person.group({ 
"key":{age:1}, 
initial:{count:0}, 
reduce:function(current,aggr){aggr.count++},
cond:{"$where":function(){return this.age>28}}
})

db.person.group({ 
... "key":{age:1}, 
... initial:{count:0}, 
... reduce:function(current,aggr){aggr.count++},
... cond:{"$where":function(){return this.age>28}}
... })
[ { "age" : 29, "count" : 2 }, { "age" : 31, "count" : 2 } ]

再复杂一点:

finalizer:

db.person.group({ 
"key":{age:1}, 
initial:{count:0}, 
reduce:function(current,aggr){aggr.count++},
cond:{"$where":function(){return this.age>28}},
finalize:function(current){ return {"age":current.age,"count":current.count,"xxxx":20}}
})

db.person.group({ 
"key":{age:1}, 
initial:{count:0}, 
reduce:function(current,aggr){aggr.count++},
cond:{"$where":function(){return this.age>28}},
finalize:function(current){ current.xxxx=22;  return current;}
})

[ { "age" : 29, "count" : 2,"xxxx":20 }, { "age" : 31, "count" : 2,"xxxx":20  } ]

转载于:https://www.cnblogs.com/weloveshare/p/5766570.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值