Afgezien van de door Matt Johnson genoemde SERVER-6310, is een andere oplossing het gebruik van het $project
operator om op te tellen bij of af te trekken van de UTC-tijdzone om "de tijd te verschuiven" naar de juiste lokale zone. Het blijkt dat je tijd in milliseconden kunt optellen of aftrekken.
Bijvoorbeeld, ervan uitgaande dat ik een datumveld heb met de naam orderTime
. Ik wil graag een vraag stellen voor EDT. Dat is -4 uur vanaf UTC. Dat is 4 * 60 * 60 * 1000 milliseconden.
Dus ik zou dan de volgende projectie schrijven om day_ordered
. te krijgen in lokale tijd voor al mijn records:
db.table.aggregate(
{ $project : { orderTimeLocal : { $subtract : [ "$orderTime", 14400000] } } },
{ $project : { day_ordered : { $dayOfYear : "$orderTimeLocal" } } })