从JavaScript(NodeJS)中的MongoDB ObjectId获取唯一的int?

时间:2015-12-04 11:54:52

标签: 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);
};

我们如何改进此程序,或改变它以实现目标?

1 个答案:

答案 0 :(得分:3)

您可以通过选择初始ObjectId(表中最旧的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)
&#13;
&#13;
&#13;