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" } } })