Mongodb入门学习(3)聚合框架

mongodb学习笔记 (四)聚合框架

简单的例子

db.live_online_data.aggregate({"$match":{"startTime":{"$gte":1520179200000},"endTime":{"$lte":1520265600000}}},{"$project":{"userOnline":1,"_id":0,"endTime":1}},{"$group":{"_id":"$endTime",count:{$sum:"$userOnline"}}},{"$sort":{"count":1}},{"$limit":10})

1 match

对集合文档进行筛选,可以使用基本的查询条件($in,$lte..)。
在实际使用过程中,要将match放到聚合框架的开始位置,一方面:尽快的将不符合条件的数据排除掉,以少数据量。另一方面,在投射和分组之前使用match查询可以使用索引。

2 project

(1) 提取文档中的字段
    如上例中将文档中的userOnline和嗯对Time提取出来,_id 不提取。
(2) 重命名字段
    如下例中,将userOnline 重命名为newuseronline.
    db.live_online_data.aggregate({{"$project":{"newuserOnline":"$userOnlin e"}})
    但是需要注意的是:如果原字段建立了索引,那么新命名的字段将不会又索引。
(3) 表达式处理
    1. 数字表达式
        如下所示,新建立了一个count字段,将user online字段和user leave字段相加赋值给count
        db.live_online_data.aggregate({{"$project":{"count":{"$add":["$userOnline","$userleave"]}})
        同理还有: 
        subtract:相减
        multiply:想乘
        divide:相除
        mod:取余
    2.日期表达式
        如下表达式,新建一个m字段,取值timestamp 的month数值
        db.live_online_data.aggregate({{"$project":{"m":{"$month","$timestamp
        "}})
        同理还有:
        year,week,dayofMonth,dayfoweek,datofyear,hour,minute,second
    3. 字符串表达式
        如下所示,新建一个name字段,取值firstname和lastname字段的组合
        db.live_online_data.aggregate({{"$project":{"name":("$concat":["$firstname","$lastname"]}})
        同理还有:
        substr:截取字节
        tolower:返回小写
        toUpper:返回大写
    4. 逻辑表达式
        如下所示,新建一个isBig字段,apple大于banana 则为正数,小于为负数,等于为0
        db.live_online_data.aggregate({{"$project":{"isBig":("cmp":["$apple","$banana"]}})
        同理还有:
        and,or,not
        还有两个控制语句:
        cond:三目运算符
        ifnull:条件判断

3 group

分组:将文档依据特定的字段的不同值进行分组。
如上例所述,将endTime作为分组的以及,并必须将其赋值给_id,分组完成后,我们可以对分组的内容进行相关的操作符操作
(1) 算数操作符:
    如上例所述,我们使用$sum 将user online的值赋值给新的变量count,
    同理还有:
    ave
(2) 极值操作符
    min,max,first,last.
(3) 数组操作符
    addtoset:将元素添加到集合中
    push:将元素添加到数组中

4 unwind

拆分:可以及那个数组中的每一个值拆分为单独的文档。

5 sort

排序

6 limit

返回的数量限制

7 skip

猜你喜欢

转载自blog.csdn.net/suiban7403/article/details/79584500