javascript - 在 JavaScript(NodeJS)中从 MongoDB ObjectId 获取唯一的整数?

标签 javascript mongodb computer-science

我参与了一个项目,我们使用 MongoDB 作为主要数据库系统,并使用 JavaScript/NodeJS 作为服务器端。我们需要与外部合作伙伴进行集成。

我们合作伙伴的 API 要求操作编号应该是唯一的整数值。我们决定结合使用来自 ObjectId 的 4 字节时间戳和 3 字节随机增量值,但结果数字太高,我们失去了精度。

这是程序

var getUniqueIntFromObjectId = function (object_id) {
    var res = null;
    object_id = object_id.toString();
    res = parseInt(object_id.substring(0, 8), 16).toString() + parseInt(object_id.substring(18, 24), 16).toString();
    return parseInt(res, 10);
};

我们如何改进这个过程,或者改变它来实现目标?

最佳答案

您可以通过选择一个初始 ObjectId(表中最旧的)来获得一个有效整数,并使用它来偏移前 4 个字节中的时间戳。这会给你一个更小的数字,它是一个有效的整数而不会失去唯一性。或者,您可以将初始 ObjectId 设置为 500000000000000000000000,对应于 2012-07-13T11:01:20.000Z

var getUniqueIntFromObjectId = function (object_id) {
    var res = null;
    object_id = object_id.toString();
    var firstObjectId='5661728913124370191fa3f8'
    var delta = parseInt(object_id.substring(0, 8), 16)-parseInt(firstObjectId.substring(0, 8),16)
    res = delta.toString() + parseInt(object_id.substring(18, 24), 16).toString();
    return parseInt(res, 10);
};

document.write("Unique integer: <br>" + getUniqueIntFromObjectId("56618f7d0000000000000000"))
document.write('<br/>')
document.write("Max safe integer: <br>"+Number.MAX_SAFE_INTEGER)

关于javascript - 在 JavaScript(NodeJS)中从 MongoDB ObjectId 获取唯一的整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34087846/

相关文章:

MongoDB查询比较同一集合中的2个字段,没有$where

mongodb - 无法在 HDP 的 Hive 查询中使用 mongo-hadoop 连接器

assembly - 指令集和指令集架构(ISA)有什么区别?

javascript - 仅运行一次 window.addEventListener ('load' ...)

javascript - React 和 Flux - 如何绑定(bind) View 来存储数据

node.js - Mongoose 从不连接到 mongodb

ruby - Ruby 语法中 "#{}"标记的正式术语是什么?

javascript - 提交图片上传表单 PHP

javascript - 如何在提交空白表单时隐藏图像?

Java按顺序将数字插入数组