Meteor如何在客户端创建一个独特的MongoDB _id?

时间:2015-10-25 14:37:36

标签: mongodb meteor minimongo

根据Meteor docs关于Mongo.Collection.insert()函数,

  

insert将为您传递的对象生成唯一ID,将其插入数据库,然后返回ID。

它也可以异步工作:

  

如果您确实提供了回调,则insert仍会立即返回ID。

是否可以保证生成的_id是全局唯一的? Meteor的Minimongo如何在客户端生成这样的_id?

1 个答案:

答案 0 :(得分:3)

由于Meteor是开源的,你可以看到它是如何完成的。

来自自述文件:

  

随机包提供了几个用于生成随机的函数   数字。它使用加密强的伪随机数   尽可能发电机,但回落到较弱的随机数   当密码学强随机性不可用时,生成器   (在较旧的浏览器上或在没有足够熵的服务器上   种子密码强的发生器)。

     

Random.id([n]) - 返回唯一标识符,例如   “Jjwjg6gouWLXhMGKW”,这可能在全世界都是独一无二的。   可选参数n指定标识符的长度   字符和默认值为17。

简短的回答是Meteor使用加密技术(按照@Kyll的名称​​ maths )来生成随机ID,该ID应该在所有mongo数据库中的所有对象中全局唯一。 “运气”部分是两个对象最终可能以相同的id结束的可能性很小。现在,_id键在mongo中被索引为唯一,因此如果存在欺骗,插入将失败。我怀疑Meteor有处理这种可能性的错误处理。