从时间戳构造具有唯一增量的Mongo ObjectId

时间:2017-11-15 12:44:20

标签: mongodb mongoose

我想为要插入的文档生成mongo 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
};

但如果我想插入具有相同时间戳的2个文档,则不满足需要。我注意到有一个get_inc函数用于将增量值添加到objectids。并且可以使用相同的时间戳生成16777214个不同的目标。有关如何使用此增量器获得16777214的唯一时间戳的任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

我尝试使用以下代码段生成随机mongo objectid。

var bson = require('bson');

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

它生成具有给定时间戳的随机mongo objectids。