2016-08-18 4 views
2

Wie/Kann ich dieMongoDB erhalten die 3-Byte-Zähler von einem ObjectId

3-Byte-Zähler erhalten, mit einem zufälligen Startwert

Teil von einem mongodb ObjectId?

Ich habe ein ObjectId wie folgt aus: ObjectId ("507f1f77bcf86cd799439011")

Nach mongodb Dokumentation:

Beschreibung

ObjectId() Gibt einen neuen ObjectId Wert. Der 12-Byte- ObjectId Wert besteht aus:

ein 4-Byte-Wert die Sekunden seit der UNIX-Epoche darstellt,

eine 3-Byte-Gerätekennung,

eine 2-Byte-Prozess-ID ,

und ein 3-Byte-Zähler, beginnend mit einem zufälligen Wert.

Ich möchte die "und einen 3-Byte-Zähler, beginnend mit einem zufälligen Wert." Teil von ObjectId oben, wenn es möglich ist.

+0

können Sie Ihre Frage bitte ausarbeiten? – rummykhan

Antwort

3

Sie könnten den folgenden Hack versuchen, wo Sie die entsprechende Zeichenfolgendarstellung des toString() oder toHexString() verwenden parseInt und slice mit ObjectId erhalten können, die Teile zu bekommen. Weil Hexadezimalziffern ein halbes Byte sind, sind die Offsets doppelt so groß:

db.collection("collectionName").findOne({}, function(err, result) {  
    if (result) { 
     var id   = result._id.toString(), ctr = 0; 
     var timestamp = parseInt(id.slice(ctr, (ctr+=8)), 16); 
     var machineID = parseInt(id.slice(ctr, (ctr+=6)), 16); 
     var processID = parseInt(id.slice(ctr, (ctr+=4)), 16); 
     var counter  = parseInt(id.slice(ctr, (ctr+=6)), 16); 
     console.log(id); 
     console.log(timestamp); 
     console.log(machineID); 
     console.log(processID); 
     console.log(counter);      
    }  
}); 
+0

mit "507f1f77bcf86cd799439011" hier getestet sind die Ergebnisse: Zeitstempel: 1350508407, MachineID: 12384364, processID: 55193, Zähler: 4.427.793 Diese alle sind gut, aber Zeitstempel 1350508407 nicht ok aussehen. neues Datum (1350508407) = Fr Jan 16 1970 16:08:28 GMT + 0100 (Standardzeit) – kailniris

+1

Zeitstempel ist nicht in Millisekunden, du musst zuerst mit 1000 multiplizieren, um das aktuelle Datum zu erhalten, dh 'neues Datum (1350508407 * 1000) = Wed 17. Oktober 2012 22:13:27 GMT + 0100 (GMT Daylight Time) ' – chridam

Verwandte Themen