Я создаю приложение в mongodb и nodejs, которое будет использоваться в Италии. Часовой пояс Италии +02: 00. Это означает, что если кто-нибудь сохранит некоторые данные в 01:00 утра 11 июля, то он будет сохранен как 11:00 вечера 10 июля, так как монго сохраняет дату в UTC. Нам нужно показать дату мудрый счетчик tx. Поэтому я сделал группу по запросу на дату. Но это показывает, что tx в предыдущий день. Что должно быть обходным путем для этого.Агрегирование по местному времени в mongodb
> 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 }
Это показывает 2 txs в 10 июля и 1 в 11 июля. Но нам нужно показать 2 txs за 11 июля и 1 tx за 10 июля.
Это было на самом деле 11 июля в Италии, когда
db.txs.insert({txid:"1",date : new Date("2015-07-11T01:00:00+02:00")})
прошла, но Монго сохраненной даты как:
ISODate("2015-07-10T23:00:00Z")
А что, если кто-то из «Новой Зеландии» захочет просмотреть данные, представленные кем-то в «Италии»? Как вы должны сохранить время? Именно по этой причине используются даты UTC, поскольку они представляют один и тот же момент времени для всех. Преобразуйте в локальное время на своем «клиенте», а также сделайте то же самое с «параметрами запроса», беря локальные даты, а затем преобразуйте их обратно в UTC. Таким образом, запросы и данные согласованы по всему миру. –
@BlakesSeven Но проблема в том, что эта группа показывает эту запись в предыдущую дату. можно ли передавать некоторые параметры, например, в зону дат, делая группу по запросу на манго? –