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

本文介绍MongoDB中使用表达式运算符进行复杂聚合统计的方法,包括条件判断、字符串操作等功能,通过具体案例演示如何实现按条件计数统计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肖永威

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值