【问题标题】:$dayOfWeek and timezone in MongoDB aggregationMongoDB 聚合中的 $dayOfWeek 和时区
【发布时间】:2016-12-22 08:45:27
【问题描述】:
我正在使用 mongo 聚合。
当地时区为EST (UTC -5),时间为08/15/16 23:00 Monday,
在数据库中,是UTC时间ISODate("2016-08-16T04:00:00.000Z"),也就是星期二。
当我使用这个 MongoDB 聚合时:
Product.aggregate([
{ $group: {
_id: {
day: { $dayOfWeek: '$time' }
}
}}
])
这个时间将被添加到星期二。有没有办法让它添加到星期一?谢谢
(客户端可以向服务器发送时区偏移-5参数)
【问题讨论】:
标签:
mongodb
mongoose
aggregation-framework
【解决方案1】:
在 Javascript 中使用以下代码:
//you get the timezone
var timeZone = new Date().getTimezoneOffset() * 60000;
将变量发送到api并在mongo中使用
例如:
//utc-5
db.orders.aggregate(
[
{ $group: { _id: {
"$dayOfWeek":{$add:['$time', -timeZone]}
}, total: { $sum: "$subTotal" } } }
]
)
注意:时区根据情况减或加。
【解决方案2】:
你可以试试这个。
Product.aggregate([
{ $group: {
_id: {
day: { $dayOfWeek: { $add: [ "$time",
{ $subtract: [ new Date( "1970-01-01T00:00:00.000Z" ), new Date( "1970-01-01T00:00:00.000" ) ] } // Time Offset
] } }
}
}}
])