mongodb - 根据具有唯一增量的时间戳构造 Mongo ObjectId

标签 mongodb mongoose

我想为要作为新插入的文档生成 mongo objectid,并覆盖时间戳值。所以我使用下面的代码来获取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
};

但是如果我想插入两个具有相同时间戳的文档,它不能满足需要。我注意到有一个 get_inc 函数用于向 objectid 添加增量值。并且可以使用相同的时间戳生成 16777214 个不同的 objectid。任何有关如何使用此增量器获取最大 16777214 的唯一时间戳的帮助都将受到赞赏。

最佳答案

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

var bson = require('bson');

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

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

关于mongodb - 根据具有唯一增量的时间戳构造 Mongo ObjectId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47307772/

相关文章:

javascript - 用 Mongoose 插入子数组

python - 高效有效的返回包含图片的mongodb结果

mongodb - 用mongo同时pull和addtoset

javascript - Mongodb:可以在没有字段名的情况下添加数据吗?

node.js - mongodb 中 $nin 的非严格行为

node.js - mongoose,使用collection.insert后获取对象的id

javascript - 请参阅 Meteor.js 中允许/拒绝规则的更新文档

mongodb - Mongo聚合框架无法按两个字段排序?

node.js - 如何提高 Mongoose/MongoDB 创建和更新大量条目的性能

javascript - 我是否可以使用 async/await 函数和 Mongoose 来处理错误?