2013-06-06 8 views
6

sto ottenendo un timestamp dal mio database MongoDB, ma sta tornando con precisione solo nei secondi:È possibile ottenere una granularità maggiore rispetto a un timestamp di MongoDB?

gio 6 giugno 2013 16:15:22 GMT-0400 (Eastern Daylight Time)

Ho bisogno di maggiore granularità. C'è un modo per ottenere un timestamp MongoDB con precisione nei millisecondi?

sto facendo la chiamata sul mio server node.js via mangusta:

var timestamp = new ObjectID().getTimestamp(); 

Come posso ottenere qualcosa di più preciso?

risposta

6

objectIds vengono memorizzati con la precisione di secondi e non è possibile modificarlo. Quindi se hai bisogno di qualcosa di millisecolare, allora devi memorizzare il tuo valore di timestamp.

+0

Questo è un peccato. Il motivo per cui sto usando il timestamp di Mongo è che penso che il mio host di nodi stia eseguendo il mio server su due macchine diverse, il che significa che Date.now() in una richiesta potrebbe effettivamente essere un tempo maggiore rispetto al successivo. Mongo era un modo per centralizzare quel tempo. C'è un'altra fonte centralizzata che potrei ottenere un tempo con precisione millisecondo che non risentirà potenzialmente di due server di nodi diversi? –

+0

Ho usato un modo diverso per ottenere lo stesso dal processo mongod. Data getDBTime privato() { ritorno (data) db.eval ("function() {return new Date()}"); } –

+0

db.eval ("function() {return new Date()}") genera un errore che dice "indefinito non è una funzione". Sto ricevendo db in questo modo: var db = mongoose.connect (connectionString) .connection.db; Questo sembra così lontano? –

0

ho generato timestamp uno dopo l'altro e ha ottenuto questi:

ObjectId("586a291570b9a181fc2f61ba").getTimestamp(); 
ISODate("2017-01-02T10:19:01Z") 

Per la prossima timestamp:

ObjectId("586a291570b9a181fc2f61bc").getTimestamp(); 
ISODate("2017-01-02T10:19:01Z") 

Si noterà che anche se l'unico granularità stampato da getTimestamp() è espresso in secondi, non ci è un'ulteriore granularità che causa la variazione della stringa ObjectId anche se entrambe sono a 01 second.

The reason:

BSON has a special timestamp type for internal MongoDB use and is not associated with the regular Date type. Timestamp values are a 64 bit value where: 

    the first 32 bits are a time_t value (seconds since the Unix epoch) 
    the second 32 bits are an incrementing ordinal for operations within a given second. 

Within a single mongod instance, timestamp values are always unique. 

Quindi la vera granularità è in termini di numero ordinale 32 bit generato da MongoDB. È correlato allo operations within a second e non a un valore temporale, quindi non lo si ottiene in termini di millisecondo.

Problemi correlati