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 的等效字符串表示=],使用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);
}
});
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 的等效字符串表示=],使用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);
}
});