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" } } })
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…