根据Meteor docs关于Mongo.Collection.insert()
函数,
insert将为您传递的对象生成唯一ID,将其插入数据库,然后返回ID。
它也可以异步工作:
如果您确实提供了回调,则insert仍会立即返回ID。
是否可以保证生成的_id是全局唯一的? Meteor的Minimongo如何在客户端生成这样的_id?
答案 0 :(得分:3)
由于Meteor是开源的,你可以看到它是如何完成的。
来自自述文件:
随机包提供了几个用于生成随机的函数 数字。它使用加密强的伪随机数 尽可能发电机,但回落到较弱的随机数 当密码学强随机性不可用时,生成器 (在较旧的浏览器上或在没有足够熵的服务器上 种子密码强的发生器)。
Random.id([n])
- 返回唯一标识符,例如 “Jjwjg6gouWLXhMGKW”,这可能在全世界都是独一无二的。 可选参数n指定标识符的长度 字符和默认值为17。
简短的回答是Meteor使用加密技术(按照@Kyll的名称 maths )来生成随机ID,该ID应该在所有mongo数据库中的所有对象中全局唯一。 “运气”部分是两个对象最终可能以相同的id结束的可能性很小。现在,_id
键在mongo中被索引为唯一,因此如果存在欺骗,插入将失败。我怀疑Meteor有处理这种可能性的错误处理。