How/Can I get the
3-byte counter, starting with a random value
part from a mongodb ObjectId?
I have an ObjectId like this: ObjectId("507f1f77bcf86cd799439011")
According to mongodb documentation:
Description
ObjectId() Returns a new ObjectId value. The 12-byte ObjectId value consists of:
a 4-byte value representing the seconds since the Unix epoch,
a 3-byte machine identifier,
a 2-byte process id,
and a 3-byte counter, starting with a random value.
I want to get the "and a 3-byte counter, starting with a random value." part from the ObjectId above if its possible.
You could try the following hack where you can get the equivalent string representation of the ObjectId
using toString()
or toHexString()
, use parseInt
and slice
to get the parts. Because hex digits are half of a byte the offsets are twice as much:
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);
}
});