栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在mongodb中的本地时区聚合

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在mongodb中的本地时区聚合

处理时区是一个“客户端”问题,因此您应按时区偏移量修改“查询”时间,以允许在UI等中选择“本地”时间。UI显示也是如此,其中日期将以当地时间表示。

同样适用于您的聚集原理。只需按时区偏移量进行调整即可。应用日期数学而不是使用日期聚合运算符:

var tzOffset = 2;db.txs.aggregate([    { "$group": {        "_id": {  "$subtract": [     { "$add": [          { "$subtract": [ "$date", new Date("1970-01-01") ] },         tzOffset * 1000 * 60 * 60     ]},     { "$mod": [         { "$add": [   { "$subtract": [ "$date", new Date("1970-01-01") ] },  tzOffset * 1000 * 60 * 60         ]},         1000 * 60 * 60 * 24     ]} ]        },        "count": { "$sum": 1 }    }}]).forEach(function(doc){     printjson({ "_id": new Date(doc._id), "count": doc.count }) });

这给你:

{ "_id" : ISODate("2015-07-10T00:00:00Z"), "count" : 1 }{ "_id" : ISODate("2015-07-11T00:00:00Z"), "count" : 2 }

因此,当您将

$subtract


一个BSON日期与另一个日期进行比较时,结果是自unix纪元以来的毫秒数。然后简单地通过“增加”正时或负的“时区偏移量”来再次调整此值,再次将其从时间值转换为有效毫秒数。

然后,舍入是一个简单的模

$mod

,可以从“一天中的毫秒数” 中获取余数,然后将其删除以将调整后的日期仅舍入到当前日期。

由于所有语言库“ Date”对象都以纪元为毫秒(或秒)作为构造函数参数,因此这里生成的数值很容易重新转换为日期。

同样,这都是关于修改数据响应以从“客户端”的“区域设置”呈现的,而不是更改数据的存储方式。如果您希望在应用程序中使用真实的本地性,则可以像上面介绍的那样,对时区偏移量进行修改。

-

实际上,您可以在聚合框架本身中创建日期,并添加一些日期数学。只需将纪元日期添加回转换后的日期即可:

db.txs.aggregate([    { "$group": {        "_id": {  "$add": [     { "$subtract": [         { "$add": [   { "$subtract": [ "$date", new Date(0) ] },  tzOffset * 1000 * 60 * 60         ]},         { "$mod": [  { "$add": [       { "$subtract": [ "$date", new Date(0) ] },      tzOffset * 1000 * 60 * 60  ]},  1000 * 60 * 60 * 24         ]}     ]},     new Date(0); ]        },        "count": { "$sum": 1 }    }}])


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383966.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号