Mongodb 从 ObjectId 获取 3 字节计数器

Mongodb get the 3-byte counter from an ObjectId

How/Can 我明白了

3-byte counter, starting with a random value

来自 mongodb ObjectId?

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

根据 mongodb 文档:

Description

ObjectId() Returns a new ObjectId value. The 12-byte ObjectId value consists of:

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

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

一个 2 字节的进程 ID,

和一个 3 字节计数器,以随机值开头。

如果可能的话,我想从上面的 ObjectId 中获取“和一个 3 字节计数器,以随机值开头。”部分。

您可以尝试以下 hack,在那里您可以获得 ObjectId using toString()toHexString()[=21 的等效字符串表示=],使用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);                    
    }       
});