MongoDB Aggregation框架可以组合$group out吗?



这是我的查询,我想将$_id组合到YYYY-MM-DD?或任何函数像Mysql DATE()转换DATETIME格式到日期格式?

db.event.aggregate([
{
    $project: {
        "created": {$add: ["$created", 60*60*1000*8]},
    }
},    
{
    $group: {
        "_id": {
            "year": {"$year": "$created"},
            "month": {"$month": "$created"},
            "day": {"$dayOfMonth": "$created"}
        },
        "count": { $sum: 1 }
    }
}

])

通过使用日期聚合操作符将组件拆分为复合_id键,您基本上已经做到了这一点,这可能是处理它的最佳方法。实际上,您可以通过 $substr 操作符和 $concat :

来改变这一点
db.event.aggregate([
    { "$project": {
            "created": {$add: ["$created", 60*60*1000*8]},
    }},    
    { "$group": {
        "_id": {
            "year": {"$year": "$created"},
            "month": {"$month": "$created"},
            "day": {"$dayOfMonth": "$created"}
        },
        "count": { "$sum": 1 }
    }},
    { "$project": {
        "_id": { "$concat": [
            { "$substr": [ "$_id.year", 0, 4 ] },
            "-",
            { "$cond": [
                { "$lte": [ "$_id.month", 9 ] },
                { "$concat": [ 
                    "0", 
                   { "$substr": [ "$_id.month", 0, 2 ] } 
                ]},
                { "$substr": [ "$_id.month", 0, 2 ] }
            ]},
            "-",
            { "$cond": [
                { "$lte": [ "$_id.day", 9 ] },
                { "$concat": [
                    "0",
                    { "$substr": [ "$_id.day", 0, 2 ] }
                ]},
                { "$substr": [ "$_id.day", 0, 2 ] }
            ]}
        ]},
        "count": 1
    }}
])

所以有一点从日期部分到字符串的值的强制转换,以及像在"YYYY-MM-DD"格式中填充任何两个数字以下的值,前导0。

注意到它可以做到,并且已经能够做到一段时间了,但是在 $substr 操作符的手册页描述中明显缺少。

不确定你开始的"日期数学"。我想说,您最好使用聚合操作符,然后处理您想要调整的值,或者如果确实是像"时区"校正一样的东西,那么您可能会更好地处理客户端。

相关内容

  • 没有找到相关文章

最新更新