MongoDB + NodeJS提供16个字符的唯一ID

我正在寻找一种有效的方式来创build长度为16个字符的64位UUID。 每个ID都必须是随机的,所以你不能预测其他的ID。

另外我不确定如何检查碰撞是否发生,我怎样才能以有效的方式寻找它们。 我正在使用一个mongoDB和一个服务器节点JS。

一个例子:我调用函数来创build1.000.000个密钥,并且在数据库中已经保存了数百万个密钥。 我怎样才能保证每个密钥都存在只有那些没有比较每个密钥到数据库中现有的密钥?

我希望有人能帮助我。 谢谢 :)

至于生成这样一个ID,我们知道Base64编码比原来的二进制大约1/3,我们可以简单地生成12个字节的随机性,然后对它进行编码:

 const crypto = require('crypto'); function generateRandomID() { return new Promise((res) => { crypto.randomBytes(12, (err, buf) => { if(err) throw err; const enc = buf.toString('base64'); if(enc.length !== 16) throw 'invalid'; res(enc); }); }); } generateRandomID() .then((id) => console.log(id)) .catch((err) => console.log(err)); 

我不是MongoDB的专家,但是我确定它有独特的索引,所以你只要尝试添加一个与之前存在的ID相同的文档,就会失败。