MongoDB聚合函数介绍

原创
2017/12/08 11:02
阅读数 865

一、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支持的函数

举例:

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/

举例

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

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

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出现的次数,根据次数倒序排序,取前三条记录

展开阅读全文
打赏
0
0 收藏
分享
加载中
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部