Mongodb从ObjectId获取3字节的计数器

Mongodb get the 3-byte counter from an ObjectId

本文关键字:字节 计数器 获取 ObjectId Mongodb      更新时间:2023-09-26

我怎样才能得到

3字节计数器,从一个随机值

开始

part from mongodb ObjectId?

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

根据mongodb文档:

描述

ObjectId()返回一个新的ObjectId值。这个由12ObjectId值包含:

一个4字节的值,表示从Unix纪元开始的秒数,

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

2字节的进程id,

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

我想获得"和一个3字节的计数器,从一个随机值开始。"

您可以尝试以下hack,其中您可以使用 toString() toHexString() 获得 ObjectId 的等效字符串表示,使用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);                    
    }       
});