A parte il SERVER-6310 menzionato da Matt Johnson, un'altra soluzione alternativa consiste nell'usare il $project
operatore per aggiungere o sottrarre dal fuso orario UTC per "spostare l'ora" nel fuso locale corretto. Risulta che puoi aggiungere o sottrarre il tempo in millisecondi.
Ad esempio, supponendo di avere un campo Data chiamato orderTime
. Vorrei eseguire una query per EDT. Cioè -4 ore da UTC. Sono 4 * 60 * 60 * 1000 millisecondi.
Quindi scriverei la seguente proiezione per ottenere day_ordered
nell'ora locale per tutti i miei record:
db.table.aggregate(
{ $project : { orderTimeLocal : { $subtract : [ "$orderTime", 14400000] } } },
{ $project : { day_ordered : { $dayOfYear : "$orderTimeLocal" } } })