Mongodb从ObjectId获取3字节计数器

kai*_*ris 4 javascript mongodb node.js objectid

怎么样/我可以得到

3字节计数器,以随机值开始

部分来自mongodb ObjectId?

我有一个像这样的ObjectId:ObjectId("507f1f77bcf86cd799439011")

根据mongodb文档:

描述

ObjectId()返回一个新的ObjectId值.12字节的ObjectId值包括:

一个4字节的值,表示自Unix纪元以来的秒数,

一个3字节的机器标识符,

一个2字节的进程ID,

和一个3字节的计数器,以随机值开始.

我希望得到" 和一个3字节计数器,从一个随机值开始. "如果可能的话,从上面的ObjectId开始.

chr*_*dam 7

你可以尝试下面的技巧,你可以得到的等效字符串表示ObjectId使用toString()toHexString(),使用parseIntslice获得的部分.因为十六进制数字是一个字节的一半,所以偏移量是两倍:

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);                    
    }       
});
Run Code Online (Sandbox Code Playgroud)

  • 时间戳不是以毫秒为单位,您需要先乘以 1000 才能获取实际日期,即 `new Date(1350508407*1000) = Wed Oct 17 2012 22:13:27 GMT+0100 (GMT Daylight Time)` (2认同)