MongoDB聚合使用表达式运算符(函数)分组按条件计数统计案例一则

Posted 肖永威

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB聚合使用表达式运算符(函数)分组按条件计数统计案例一则相关的知识,希望对你有一定的参考价值。

在MongoDB聚合统计过程中,经常使用表达式运算符用于构造用于聚合管道阶段的表达式。运算符表达式类似于接受参数的函数。通常,这些表达式采用参数数组,并具有以下形式:

 <operator>: [ <argument1>, <argument2> ... ] 

如果运算符接受单个参数,则可以忽略指定参数列表的外部数组:

 <operator>: <argument> 

例如分组按条件计数统计案例:
使用了'$concat'、'$substr'、'$sum'、'$cond'、'$eq'、'$lt'等运算符,详见如下代码:

db.getCollection('customerfeature').aggregate([
    '$project':'yearmonth':'$yearmonth','lateststatus':'$lateststatus','trademonth':'$concat':['$substr':['$occurtime',0,4],'$substr':['$occurtime',5,2]],
    '$group':'_id':'$yearmonth',
        'allcount':'$sum':1,
        'activecount':'$sum':'$cond':['$eq':['$trademonth','$yearmonth'],1,0],
        'count':'$sum':'$cond':['$lt':['$lateststatus',3],1,0],
        'churncount':'$sum':'$cond':['$eq':['$lateststatus',3],1,0]
        ,
    '$sort':'_id':1
    ],
    'allowDiskUse':true)

注意小心得:

  • 首先,表达式形式为中括号“[]”,避免与大括号“”混淆;
  • 其次,参数为引用数据,前面加“$”符号。

其中,原数据集中occurtime为字符串,格式为yyyy-mm-dd,例如:2017-11-02。

其中:
$concat连接操作符,将给定表达式中的字符串连接一起。用法:

 $concat: [ <expression1>, <expression2>, ... ] 

$substr用于返回子字符串。用法:

 $substr: [ <string>, <start>, <length> ] 

$cond条件操作符。用法:

 $cond: [ <boolean-expression>, <true-case>, <false-case> ] 

$eq比较表达式中两个是否相等,是则返回true,否则返回false。

用法 $eq: [ <expression1>, <expression2> ] 

参考:
[1]. Aggregation Pipeline Operators. MONGODB MANUAL 4.0
[2]. 莫问今朝. 【mongoDB查询进阶】聚合管道(三)–表达式操作符 . 博客园 . 2018.03

以上是关于MongoDB聚合使用表达式运算符(函数)分组按条件计数统计案例一则的主要内容,如果未能解决你的问题,请参考以下文章

《MongoDB入门教程》第22篇 聚合操作

《MongoDB入门教程》第22篇 聚合操作

《MongoDB入门教程》第22篇 聚合操作

mongodb聚合命令

MongoDB的聚合操作

Mongodb 聚合 - 今天按小时分组