Получение метки времени 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 не допускает отрицательной длины. У кого-нибудь есть другое решение?

Ответы на вопрос(1)

Ваш ответ на вопрос