MongoDB日期处理

这篇博客介绍了如何在MongoDB中利用聚合框架进行日期字段的处理,包括使用$dateToString将日期字段格式化为年月日,并基于此进行数据汇总统计。示例展示了如何进行无条件和有条件(时间范围)的统计,以及等效的SQL查询语句。此外,还提到了$year, $month, $dayOfMonth等日期操作符用于显示日期的年月日部分。
摘要由CSDN通过智能技术生成

需求是根据集合col的create_date字段只查询日期年月日,然后去汇总统计。

$dateToString

根据用户指定的格式将日期对象转换为字符串。

{ $dateToString: {
    date: <dateExpression>,
    format: <formatString>,
    timezone: <tzExpression>,
    onNull: <expression>
} }
  • date:转换为字符串的日期。
  • format:可选的。日期格式规范。如果未指定,则$dateToString使用 "%Y-%m-%dT%H:%M:%S.%LZ"默认格式。
  • timezone:运算结果的时区。
  • onNull:可选的。如果date为null或缺少,则返回的值。参数可以是任何有效的表达式。如果未指定,$dateToString则如果datenull为null或缺少,则返回null 。

查询字段只截取日期年月日

查询集合col的create_date字段只截取日期年月日

db.col.aggregate(
{$project:{"_id":"$_id", "create_date":{"$dateToString":{ format:"%Y-%m-%d",date:"$create_time"}}}}
)

按年月日汇总统计

db.col.aggregate(
{$project:{"_id":"$_id", "create_date":{"$dateToString":{ format:"%Y-%m-%d",date:"$create_time"}}}},
{$group:{ "_id":"$create_date",count:{$sum:1}}}
)

// 去掉$project,直接统计

db.col.aggregate(
{$group:{ "_id":{"$dateToString":{ format:"%Y-%m-%d",date:"$create_time"}},count:{$sum:1}}}
)

如果有条件限制

db.col.aggregate({
"$match":{"create_time":{$gte:ISODate("2022-05-01T00:00:00Z"),$lte:ISODate("2022-05-05T00:00:00Z")}}
},
{$group:{ "_id":{"$dateToString":{ format:"%Y-%m-%d",date:"$create_time"}},count:{$sum:1}}}
)

相当于SQl的查询语句

SELECT DATE_FORMAT(create_time,'%Y-%m-%d') as create_date,
count(*) as `count`
FROM col
WHERE create_time >= '2022-05-01'
  AND create_time <= '2022-05-05'
GROUP BY DATE_FORMAT(create_time,'%Y-%m-%d');

$year, $month, $dayOfMonth

显示年月日:年: $year 月: $month 日: $dayOfMonth

参考:https://mongodb.net.cn/manual/reference/operator/aggregation/dateToString/

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值