Obtendo o timestamp unix em segundos do MongoDB ISODate durante a agregação
Eu estava procurando por este, mas não encontrei nada útil para resolver meu caso. O que eu quero é obter o timestamp unix em segundos do MongoDB ISODate durante a agregação. O problema é que posso obter o carimbo de data / hora do ISODate, mas está em milissegundos. Então, eu precisaria cortar esses milissegundos. O que eu tentei é:
> db.data.aggregate([
{$match: {dt:2}},
{$project: {timestamp: {$concat: [{$substr: ["$md", 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
])
Como você pode ver, estou tentando obter o timestamp do 'md' var e também concatenar esse timestamp com '01' e o número 'id'. O código acima fornece:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "2014-02-10T16:20:56011141"
}
Então eu melhorei o comando com:
> db.data.aggregate([
{$match: {dt:2}},
{$project: {timestamp: {$concat: [{$substr: [{$subtract: ["$md", new Date('1970-01-01')]}, 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
])
Agora eu recebo:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "1392049256000011141"
}
O que eu realmente preciso é de 1392049256011141, portanto, sem os 3 000 extras. Tentei com $ subtrair:
> 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]}]}}}
])
O que eu recebo é:
{
"_id" : ObjectId("52f8fc693890fc270d8b456b"),
"timestamp" : "1.39205e+009011141"
}
Não é exatamente o que eu esperaria do comando. Infelizmente, o operador $ substr não permite comprimento negativo. Alguém tem outra solução?