2016-08-18 70 views
2

如何/我可以得到的MongoDB從的ObjectId獲得3個字節的計數器

3個字節的計數器,開始從MongoDB中的ObjectId隨機值

一部分?

我有一個這樣的的ObjectId: 的ObjectId( 「507f1f77bcf86cd799439011」)

據MongoDB的文檔:

說明

的ObjectId()返回一個新的ObjectId值。 12字節 的ObjectId值包括:

自Unix紀元表示秒的4字節的值,

一個3字節的機器標識符,

的2字節的進程id ,

和一個3字節計數器,從一個隨機值開始。

我想要得到的「和3個字節的計數器,從一個隨機值。」以上,如果可能部分來自的ObjectId。

+0

可以詳細說明您的問題嗎? – rummykhan

回答

3

你可以試試下面的技巧,你可以使用toString()toHexString(),使用parseIntslice獲得部分獲得的ObjectId等效字符串表示。因爲十六進制數字是一個字節的一半,所以偏移量是原來的兩倍:

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, 設備ID:12384364, 的ProcessID:55193, 計數器:4427793 這些都是好的,但時間戳1350508407看起來並不確定。 新日期(1350508407)=週五1970年1月16日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