Я сохраняю свою транзакцию с чем-то вроде:
{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
. Есть предложения?