我正在使用mongodb和nodejs构建一个应用程序,将在意大利使用。意大利时区为+02:00。这意味着,如果有人在7月11日的01:00保存了一些数据,那么由于mongo将日期保存为UTC,它将显示为10月7日的11:00 pm。
我们需要按日期显示tx计数。因此,我在日期上进行了分组查询。但是它显示了前一天的tx。有什么解决方法?
> db.txs.insert({txid:"1",date : new Date("2015-07-11T01:00:00+02:00")})
> db.txs.insert({txid:"2",date : new Date("2015-07-11T05:00:00+02:00")})
> db.txs.insert({txid:"3",date : new Date("2015-07-10T21:00:00+02:00")})
> db.txs.find().pretty()
{
"_id" : ObjectId("55a0a55499c6740f3dfe14e4"),
"txid" : "1",
"date" : ISODate("2015-07-10T23:00:00Z")
}
{
"_id" : ObjectId("55a0a55599c6740f3dfe14e5"),
"txid" : "2",
"date" : ISODate("2015-07-11T03:00:00Z")
}
{
"_id" : ObjectId("55a0a55699c6740f3dfe14e6"),
"txid" : "3",
"date" : ISODate("2015-07-10T19:00:00Z")
}
> db.txs.aggregate([
{ $group:{
_id: {
day:{$dayOfMonth:"$date"},
month:{$month:"$date"},
year:{$year:"$date"}
},
count:{$sum:1}
}}
])
{ "_id" : { "day" : 11, "month" : 7, "year" : 2015 }, "count" : 1 }
{ "_id" : { "day" : 10, "month" : 7, "year" : 2015 }, "count" : 2 }
它显示了7月10日有2个交易,7月11日有1个交易。但我们需要展示7月11日有2个交易,7月10日有1个交易。
实际上当时是意大利的7月11日。
db.txs.insert({txid:"1",date : new Date("2015-07-11T01:00:00+02:00")})
发生了事件,但Mongo将日期存储为:
ISODate("2015-07-10T23:00:00Z")