Neben dem von Matt Johnson erwähnten SERVER-6310 besteht eine weitere Problemumgehung darin, das $project
zu verwenden Operator zum Addieren oder Subtrahieren von der UTC-Zeitzone, um die Zeit in die richtige lokale Zone zu "verschieben". Es stellt sich heraus, dass Sie die Zeit in Millisekunden addieren oder subtrahieren können.
Angenommen, ich habe ein Datumsfeld namens orderTime
. Ich möchte nach EDT fragen. Das sind -4 Stunden von UTC. Das sind 4 * 60 * 60 * 1000 Millisekunden.
Also würde ich dann die folgende Projektion schreiben, um day_ordered
zu erhalten in Ortszeit für alle meine Aufzeichnungen:
db.table.aggregate(
{ $project : { orderTimeLocal : { $subtract : [ "$orderTime", 14400000] } } },
{ $project : { day_ordered : { $dayOfYear : "$orderTimeLocal" } } })