Получение метки времени Unix в секундах из MongoDB ISODate во время агрегации
Я искал это, но я не мог найти ничего полезного, чтобы решить мое дело. Я хочу получить метку времени Unix в секундах из ISODate MongoDB во время агрегации. Проблема в том, что я могу получить метку времени из ISODate, но это в миллисекундах. Поэтому мне нужно вырезать эти миллисекунды. Что я пробовал это:
> db.data.aggregate([
{$match: {dt:2}},
{$project: {timestamp: {$concat: [{$substr: ["$md", 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
])
Как вы можете видеть, я пытаюсь получить временную метку из 'md' var, а также объединить эту временную метку с '01' и номером 'id'. Приведенный выше код дает:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "2014-02-10T16:20:56011141"
}
Затем я улучшил команду:
> db.data.aggregate([
{$match: {dt:2}},
{$project: {timestamp: {$concat: [{$substr: [{$subtract: ["$md", new Date('1970-01-01')]}, 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
])
Теперь я получаю:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "1392049256000011141"
}
Что мне действительно нужно, так это 1392049256011141 без 3 лишних 000. Я пробовал с $ вычитанием:
> db.data.aggregate([
{$match: {dt:2}},
{$project: {timestamp: {$concat: [{$substr: [{$divide: [{$subtract: ["$md", new Date('1970-01-01')]}, 1000]}, 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
])
Что я получаю это:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "1.39205e+009011141"
}
Не совсем то, что я ожидал от команды. К сожалению, оператор $ substr не допускает отрицательной длины. У кого-нибудь есть другое решение?