mongo cond $add 相差8小时 ISODate 按时、日、周、天、月、季度、年 对日期进行分组

可以使用 $cond 运算符

$month 是<= 3,取值为first
$month是<= 6,取值second
m o n t h 是 < = 9 , 取 值 t h i r d 否 则 , 字 段 q u a r t e r 的 值 为 第 四 " . 然 后 在 q u a r t e r 字 段 中 输 入 month是<= 9,取值third 否则,字段quarter的值为第四". 然后在quarter字段中输入 month<=9thirdquarter".quartergroup.

db.collection.aggregate([
{$project:{"date":1,
           "quarter":{$cond:[{$lte:[{$month:"$date"},3]},
                             "first",
                             {$cond:[{$lte:[{$month:"$date"},6]},
                                     "second",
                                     {$cond:[{$lte:[{$month:"$date"},9]},
                                             "third",
                                             "fourth"]}]}]}}},
{$group:{"_id":{"quarter":"$quarter"},"results":{$push:"$date"}}}
])

复杂化

db.getCollection("organization_message_notice").aggregate(
    [{
        "$match": {
            "createTime":{
							"$gt" : ISODate("2022-12-01 17:30:10.346")
						}
        }
    }, {
        "$project": {
            "onlyCrc": 1,
            "streamId": 1,
            "createTime": 1,
            "createTimeOfCZ": {
                "$add": ["$createTime", 8 * 60 * 60 * 1000]
            },
            
        }
    }, {
        //两个project管道
        "$project": {
            "onlyCrc": 1,
            "streamId": 1,
            "createTime": 1,
            "createTimeOfCZ": 1,
            "year": {
                "$year": ["$createTimeOfCZ"]
            },
            "month": {
                "$month": "$createTimeOfCZ"
            },
            "week": {
                "$week": "$createTimeOfCZ"
            },
            "day": {
                "$dayOfMonth": "$createTimeOfCZ"
            },
            "hour": {
                "$hour": "$createTimeOfCZ"
            },
            "quarter": {
                "$cond": [{
                    "$lte": [{
                        "$month": "$date"
                    }, 3]
                }, "first", {
                    "$cond": [{
                        "$lte": [{
                            "$month": "$date"
                        }, 6]
                    }, "second", {
                        "$cond": [{
                            "$lte": [{
                                "$month": "$date"
                            }, 9]
                        }, "third", "fourth"]
                    }]
                }]
            }
        }
    }, {
        "$group": {
            "_id": {
                "onlyCrc": "$onlyCrc",
                "streamId": "$streamId",
                "year": "$year",
								"quarter" : "$quarter"
//                "month": {
//                    "$month": "$createTimeOfCZ"
//                },
//                "day": {
//                    "$dayOfMonth": "$createTimeOfCZ"
//                }
            },
            "onlyCrc": {
                "$first": "$onlyCrc"
            },
            "streamId": {
                "$first": "$streamId"
            },
            "year": {
                "$first": "$year"
            },
						"quarter" : {
								"$first" : "$quarter"
						},
            "month": {
                "$first": "$month"
            },
            "day": {
                "$first": "$day"
            },
            "createTime": {
                "$min": "$createTime"
            },
            "createTimeOfCZ": {
                "$min": "$createTimeOfCZ"
            },
            "count": {
                "$sum": 1
            }
        }
    }, {
        "$project": {
            "_id": 0
        }
    }, ]
)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值