Tôi đang xây dựng ứng dụng trong mongodb và nodejs sẽ được sử dụng ở Ý. Múi giờ Ý là +02: 00. Điều này có nghĩa là nếu bất kỳ ai tiết kiệm một số dữ liệu vào lúc 01: sáng ngày 11 tháng 7 thì nó sẽ được lưu vào lúc 11:00 tối ngày 10 tháng 7 khi mongo lưu ngày tháng trong UTC. Chúng tôi cần hiển thị số lượng tx ngày khôn ngoan. Vì vậy, tôi đã nhóm theo truy vấn vào ngày. Nhưng nó cho thấy tx trong ngày hôm trước. Cần phải giải quyết vấn đề gì cho việc này.Tổng hợp theo múi giờ địa phương ở 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 }
Nó hiển thị 2 tx vào ngày 10 tháng 7 và ngày 1 tháng 11. Nhưng chúng ta cần hiển thị 2 tx trong 11 tháng 7 và 1 tx cho ngày 10 tháng 7.
Nó thực sự là 11 tháng 7 tại Ý khi
db.txs.insert({txid:"1",date : new Date("2015-07-11T01:00:00+02:00")})
đã diễn ra nhưng Mongo ngày lưu trữ như:
ISODate("2015-07-10T23:00:00Z")
Vậy nếu ai đó từ "New Zealand" muốn xem dữ liệu do người nào đó gửi trong "Ý" thì sao? Làm thế nào bạn nên lưu trữ thời gian sau đó? Đó là lý do tại sao ngày UTC được sử dụng vì chúng đại diện cho cùng một thời điểm cho mọi người. Chuyển đổi thành giờ địa phương trên "khách hàng" của bạn và cũng làm tương tự với "tham số truy vấn" lấy ngày địa phương và sau đó chuyển đổi chúng trở lại UTC. Bằng cách đó, các truy vấn và dữ liệu đều phù hợp trên toàn cầu. –
@BlakesSeven Nhưng prob là nhóm đó bằng cách hiển thị bản ghi đó trong ngày trước đó. sao có thể truyền một số tham số như múi giờ trong khi tạo nhóm theo truy vấn trên mongo? –