Ngoài SERVER-6310 được Matt Johnson đề cập, một giải pháp khác là sử dụng $project
toán tử để thêm hoặc bớt từ múi giờ UTC để "chuyển thời gian" vào múi giờ địa phương chính xác. Hóa ra bạn có thể cộng hoặc trừ thời gian tính bằng mili giây.
Ví dụ:giả sử tôi có trường Ngày được gọi là orderTime
. Tôi muốn truy vấn EDT. Đó là -4 giờ từ UTC. Đó là 4 * 60 * 60 * 1000 mili giây.
Vì vậy, sau đó tôi sẽ viết phép chiếu sau để lấy day_ordered
theo giờ địa phương cho tất cả hồ sơ của tôi:
db.table.aggregate(
{ $project : { orderTimeLocal : { $subtract : [ "$orderTime", 14400000] } } },
{ $project : { day_ordered : { $dayOfYear : "$orderTimeLocal" } } })