Mongodb不支持把时间戳转成date类型?
数据库里面存的时间全是时间戳,有些数据需要按日期统计的时候就尴尬了。请大家帮想想办法。
可以存为时间格式,我记得有个项目是ISOdate格式,一般都用时间戳
@nobody 现在问题是项目已经做完了,发现时间戳无法做统计。比如,查找某个资源某月份每日访问量
@qujinxiong 之前我也遇到过类似的问题,我选择了冗余字段来表示,比如timestamp 为时间戳,同时冗余了3个字段,month_stamp应对当月0天0时0分0秒的时间戳,day_stamp对应当天0点0分0秒的时间戳,hour_stamp对应当天小时的0分0秒时间戳,然后每次根据这个维度查值是,直接group_by+各种计算= aggregate,所以我觉着你可以跑个程序,专门根据已有时间戳来跑这个冗余字段,然后根据分组来计算
@Fov6363 目前我能想到的办法和你类似:再多存一个对应的date类型时间,就可以用$year/$month/$day+$group这几个操作符来处理了。因为之前的数据不能删,我还得想办法把所有时间戳转成date类型另存一个字段
@qujinxiong 可以不使用nodejs统计,使用java 或 go 这些语言统计试试?
map reduce 试过吗?
@Jaymi66 这个木有试过,感觉那个好难。一直没用过
@nobody 我另起项目,专门做统计?有点太费事了
{ ’$group’: { ’_id’: { ’$dateToString’: { ‘format’: ‘%Y-%m-%d’, ‘date’: { ’$add’: [ new Date(0), ’$createTime’, ], }, }, }, ‘count’: {’$sum’: 1}, }, },
@qujinxiong 当然是可以滴,不过要注意姿势
@aojiaotage 正解!激动!感谢! 为了后来者方便看,我编辑一下格式:
db.getCollection('videos').aggregate([
{
'$match':{
'_id':1
}
},
{
'$group': {
'_id': {
'$dateToString': {
'format': '%Y-%m-%d',
'date': {
'$add': [
new Date(0),
'$createTime'
]
}
}
},
'count': {'$sum': 1}
}
}]);
主要是利用$add操作符,把日期和时间戳相加,得到另一个日期。