Selain SERVER-6310 yang disebutkan oleh Matt Johnson, satu solusi lain adalah dengan menggunakan $project operator untuk menambah atau mengurangi dari zona waktu UTC untuk "menggeser waktu" ke zona lokal yang benar. Ternyata Anda dapat menambah atau mengurangi waktu dalam milidetik.
Misalnya, dengan asumsi saya memiliki bidang Tanggal yang disebut orderTime . Saya ingin menanyakan EDT. Itu -4 jam dari UTC. Itu 4 * 60 * 60 * 1000 milidetik.
Jadi saya akan menulis proyeksi berikut untuk mendapatkan day_ordered dalam waktu setempat untuk semua catatan saya:
db.table.aggregate(
{ $project : { orderTimeLocal : { $subtract : [ "$orderTime", 14400000] } } },
{ $project : { day_ordered : { $dayOfYear : "$orderTimeLocal" } } })