Saravanan K
Saravanan K

Reputation: 61

Construct Mongo ObjectId from timestamp with unique increment

I want to generate mongo objectid for the documents to be inserted as new with the timestamp value overwritten. so i used below code to get objectid.

var oIdWithTimestamp = function (timestamp) {
    // Convert string date to Date object (otherwise assume timestamp is a date)
    if (typeof (timestamp) == 'string') {
        timestamp = new Date(timestamp);
    }

    // Convert date object to hex seconds since Unix epoch
    var hexSeconds = Math.floor(timestamp / 1000).toString(16);

    // Create an ObjectId with that hex timestamp
    var constructedObjectId = mongoose.Types.ObjectId(hexSeconds + "0000000000000000");

    return constructedObjectId
};

but if i want to insert 2 documents with same timestamp it doesn't fullfill the need. I noticed there is a get_inc function used to add incrementor value to objectids. And 16777214 different objectids can be generated using same timestamp. Any help regarding how to use this incrementor to get unique timestamp upto 16777214 is appreciated.

Upvotes: 2

Views: 1150

Answers (1)

Saravanan K
Saravanan K

Reputation: 61

I have tried generating random mongo objectid using below snippet.

var bson = require('bson');

var generateObjIdFromTime = function(spefictime) {
    spefictime = ~~(spefictime/1000);
    return bson.ObjectID(spefictime);
}  

It generates random mongo objectids with given timestamp.

Upvotes: 2

Related Questions