MongoDB聚合函数介绍

一、sql与mongo聚合函数对应关系

SQL中               mongodb中

WHERE          $match

GROUP BY        $group

HAVING           $match

SELECT             $project

ORDER BY       $sort

LIMIT                $limit

SUM()               $sum

COUNT()          $sum

join                    $lookup

 

二、数据准备

for(var i = 0; i < 100; i++){

    for(var j = 0; j < 4; j++){

        db.scores.insert({uid:"u" + i, course:"课程" + j, score: Math.random()*100});

    }

}

 

三、使用示例

1、match过滤记录

db.scores.aggregate({$match:{score:{$gte:80}}})

查询score>=80的记录

 

2、project过滤字段

db.scores.aggregate({$match:{score:{$gte:80}}}, {$project:{_id:0, uid:1, course:1}})

查询score>=80的uid和course,过滤_id

project支持的函数

110640_6kze_1407079.png

举例:

db.scores.aggregate({$project:{uid:1, cname:"$course",

newScore:{$add:["$score", 20]}}}

)

查询uid,把course字段取别名cname,所有score加20后取别名newScore

 

日期函数

官网文档:

https://docs.mongodb.com/manual/reference/operator/aggregation/dateToString/

110702_hrDV_1407079.png

举例

db.scores.aggregate({$project:{ uid:1,

createTime:{$dateToString:{format: "%Y-%m-%d %H:%M:%S", date:"$createTime"}}}})

110732_dsEX_1407079.png

110753_S27n_1407079.png

3、group分组

db.scores.aggregate({$match:{score:{$gte:80}}}, {$project:{uid:1}}, {$group:{_id:"$uid", count:{$sum:1}}})

查询score>=80的uid,统计每个uid出现的次数

 

$group:{$_id:{uid:”$uid”, cid:”$course”}}

按多字段分组

 

group支持的函数

举例:

db.scores.aggregate(

{$group:{_id:"$uid", total:{$sum:"$score"}}},

{$sort:{total:-1}},

{$limit:10})

查询总分前十名用户

 

4、sort排序

db.scores.aggregate(

{$match:{score:{$gte:80}}}, {$project:{uid:1}},

{$group:{_id:"$uid", count:{$sum:1}}},

{$sort:{count:-1}}

)

查询score>=80的uid,统计每个uid出现的次数,根据次数倒序排序

 

5、limit

db.scores.aggregate(

{$match:{score:{$gte:80}}}, {$project:{uid:1}},

{$group:{_id:"$uid", count:{$sum:1}}}, {$sort:{count:-1}},

{$limit:3}

)

查询score>=80的uid,统计每个uid出现的次数,根据次数倒序排序,取前三条记录

转载于:https://my.oschina.net/u/1407079/blog/1586756

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值