mongoose 聚合分组 format date 问题
发布于 6 年前 作者 linkenliu 2261 次浏览 来自 问答

1.现在有这样一个问题,业务是根据日期(单位天)进行分组,我现在库中有一个时间戳格式和一个iso格式的。 2.本想格式化时间戳 然后进行分组 最后没搞定。 3.后来利用iso格式的format 时间,发现少了8小时后。

有上神来帮忙看看么。

//这是iso  format的  有问题 少8小时
 let data = await global[table].aggregate(
        [
            {$match: condition},
            {$project: {date1Str: {$dateToString: {format: "%Y-%m-%d", date: '$createdAt'}}}},
            {$group: {_id: "$date1Str", newTotal: {$sum: 1}}},
            {$sort: {_id: -1}}
        ]
    );
5 回复

居然用上global🤣🤣🤣

@zengming00 没办法,接过来别人的代码。 发现很多东西都存global的,虽然不符合我之前的风格。

@zengming00 iso加8小时后已解决。 {$project: {date1Str: {$dateToString: {format: “%Y-%m-%d”, date: ‘$createdAt’, 8 * 60 * 60*1000}}}}

但timestamp 暂时还没搞定

@linkenliu 虽然我没有用过这功能,但既然有将date转成string的就肯定有转成timestamp的,对于时间的处理,一般都是存的标准时间,在需要的地方转换成本地时区, 造成这种现象肯定是因为旧数据导致的,建议做一次数据的修复,具体看数据量多少决定最终使用哪一种格式

@zengming00 虽然这想法还OK,但从现在系统层面上来讲,几乎不可能的,目前有3套系统互接。 虽然说在改变本地时区能解决我现在的问题,但是改变时区是双向的,那其他任何地方查出来数据也需要把时区改回来,太过于麻烦(而且我认为不太合理)。 这也不可能说为了一个报表的统计数据去改变原先的逻辑。

回到顶部