Unix-Zeitstempel in Sekunden aus MongoDB ISODate während der Aggregation holen

Ich habe nach diesem gesucht, aber ich konnte nichts Nützliches finden, um meinen Fall zu lösen. Ich möchte, dass MongoDB ISODate während der Aggregation den Unix-Zeitstempel in Sekunden ausgibt. Das Problem ist, dass ich den Zeitstempel aus ISODate herausholen kann, aber er ist in Millisekunden. Also müsste ich diese Millisekunden ausschneiden. Was ich ausprobiert habe ist:

> db.data.aggregate([
    {$match: {dt:2}}, 
    {$project: {timestamp: {$concat: [{$substr: ["$md", 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
  ])

Wie Sie sehen können, versuche ich, den Zeitstempel aus 'md' var herauszuholen und diesen Zeitstempel auch mit '01' und der 'id' Nummer zu verketten. Der obige Code gibt:

{
    "_id" : ObjectId("52f8fc693890fc270d8b456b"),
    "timestamp" : "2014-02-10T16:20:56011141"
}

Dann habe ich den Befehl verbessert mit:

> db.data.aggregate([
    {$match: {dt:2}},
    {$project: {timestamp: {$concat: [{$substr: [{$subtract: ["$md", new Date('1970-01-01')]}, 0, -1]}, '01', {$substr: ["$id", 0, -1]}]}}}
  ])

Jetzt bekomme ich:

{
    "_id" : ObjectId("52f8fc693890fc270d8b456b"),
    "timestamp" : "1392049256000011141"
}

Was ich wirklich brauche, ist 1392049256011141, also ohne die 3 zusätzlichen 000. Ich habe es mit $ subtrahieren versucht:

> 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]}]}}}
  ])

Was ich bekomme ist:

{
    "_id" : ObjectId("52f8fc693890fc270d8b456b"),
    "timestamp" : "1.39205e+009011141"
}

Nicht genau das, was ich von dem Befehl erwarten würde. Leider erlaubt der $ substr-Operator keine negative Länge. Hat jemand eine andere Lösung?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage