Mis à part le SERVER-6310 mentionné par Matt Johnson, une autre solution consiste à utiliser le $project
opérateur pour ajouter ou soustraire du fuseau horaire UTC pour "décaler l'heure" dans le fuseau local correct. Il s'avère que vous pouvez ajouter ou soustraire du temps en millisecondes.
Par exemple, en supposant que j'ai un champ Date appelé orderTime
. J'aimerais interroger EDT. C'est-à-4 heures de l'UTC. C'est 4 * 60 * 60 * 1000 millisecondes.
J'écrirais donc la projection suivante pour obtenir day_ordered
en heure locale pour tous mes enregistrements :
db.table.aggregate(
{ $project : { orderTimeLocal : { $subtract : [ "$orderTime", 14400000] } } },
{ $project : { day_ordered : { $dayOfYear : "$orderTimeLocal" } } })