Aside from the SERVER-6310 mentioned by Matt Johnson, one other workaround is to use the $project
operator to add or subtract from the UTC time zone to “shift the time” into the correct local zone. Turns out you can add or subtract time in milliseconds.
For example, assuming I have a Date field called orderTime
. I’d like to query for EDT. That is -4 hours from UTC. That’s 4 * 60 * 60 * 1000 milliseconds.
So I would then write the following projection to get day_ordered
in local time for all my records:
db.table.aggregate(
{ $project : { orderTimeLocal : { $subtract : [ "$orderTime", 14400000] } } },
{ $project : { day_ordered : { $dayOfYear : "$orderTimeLocal" } } })