Mongodb агрегат: конвертировать дату в другой часовой пояс

Я сохраняю свою транзакцию с чем-то вроде:

{code: "A", total: 250000, timestamp: ISODate("2016-01-20T23:57:05.771Z")},
{code: "B", total: 300000, timestamp: ISODate("2016-01-20T05:57:05.771Z")}

каждая транзакция имеет поле timestamp в часовом поясе UTC. Поскольку я живу в часовом поясе Джакарта (UTC + 7), мне нужно добавить 7 часов к своей временной метке перед агрегацией. Вот мой синтаксис монго:

db.transaction.aggregate(
[
 {
   $project:
     {
       year: { $year: "$timestamp" },
       month: { $month: "$timestamp" },
       day: { $dayOfMonth: "$timestamp" }
     }
 }
])

Возвращает:

    {
        "_id" : ObjectId("56a01ed143f2fd071793d63b"),
        "year" : 2016,
        "month" : 1,
        "day" : 20
    },
    {
        "_id" : ObjectId("56a01ed143f2fd071793d63b"),
        "year" : 2016,
        "month" : 1,
        "day" : 20
    }

, что неверно с первой транзакции (код A), произошедшей 21 января, но так как преобразованный в UTC (-7 часов), он стал ISODate("2016-01-20T23:57:05.771Z")

Примечание: я знаю об этой же проблеме здесь , вот что я уже пробовал:

db.transaction.aggregate(
[
 {$project: {"timestamp": {$add: [7 * 60 * 60 * 1000]}}},
 {
   $project:
     {
       year: { $year: "$timestamp" },
       month: { $month: "$timestamp" },
       day: { $dayOfMonth: "$timestamp" }
     }
 }
])

, но возвращает ошибку can't convert from BSON type NumberDouble to Date. Есть предложения?

8
задан Community 23 May 2017 в 12:17
поделиться