2016-08-18 2 views
2

Как/я могу получить счетчикMongoDB получить счетчик 3-байтовый из ObjectId

3-байтовый, начиная со случайным значением

часть из MongoDB ObjectId?

У меня есть ObjectId так: ObjectId ("507f1f77bcf86cd799439011")

Согласно MongoDB документации:

Описание

ObjectId() Возвращает новое значение ObjectId. 12-байтовое значение ObjectId состоит из:

значение по 4 байта, представляющая секунд с начала эпохи Unix,

идентификатор машины 3-байтовое,

идентификатор процесса 2-байтовое ,

и 3-байтовый счетчик, начиная со случайного значения.

Я хочу, чтобы получить «и 3-байтовый счетчик, начиная со случайным значением.» часть из ObjectId выше, если его возможно.

+0

можете усовершенствовать свой вопрос, пожалуйста? – rummykhan

ответ

3

Вы можете попробовать следующее хак, где вы можете получить эквивалентную строковое представление ObjectId использованием toString() или toHexString(), используйте parseInt и slice, чтобы получить детали. Поскольку шестнадцатеричные цифры составляют половину байта, смещения в два раза больше:

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

протестирована с "507f1f77bcf86cd799439011" вот результаты: метка времени: 1350508407, machineId: 12384364, ProcessId: 55193, счетчик: 4427793 Это все хорошо, но временная метка 1350508407 не выглядит хорошо. new Дата (1350508407) = Пт Янв 16 1970 16:08:28 GMT + 0100 (Стандартное время романса) – kailniris

+1

Временная метка не в миллисекундах, вам нужно умножить на 1000 сначала, чтобы получить фактическую дату, т.е. 'new Date (1350508407 * 1000) = Wed Oct 17 2012 22:13:27 GMT + 0100 (GMT Daylight Time) ' – chridam

Смежные вопросы