_id 在哪里生成(并检查)?

Where does the _id being generated (and checked)?

数据库操作插入现在似乎是在插入后同步返回_id,因此这里不需要回调。

问题在于在哪里生成(和检查)_id,因为这似乎是在 miniMongo 上完成的快速同步操作,但是没有某个集合的_id 的完整列表,这怎么可能miniMongo检查_id是否重复??

当在客户端使用 Collection.insert 时,_id 是在客户端使用 random uuid algorithm 生成的,因此看似完美的延迟补偿客户端插入。

Collection.insert被实现为Meteor.method的特例,我们知道在客户端模拟的同时运行,会触发相应的服务端操作,客户端文档连同其本地生成的 _id.

一起发送到服务器

在服务器上,检查 _id 是否正确(真正唯一)并且服务器确认有效插入返回给客户端。

如果客户端生成的 _id 毕竟不是唯一的,那么插入将失败并显示 "duplicate key error" (这可能发生在 0.001% 的时间内——概率更低,并且您将不得不重新提交您的客户表格或其他任何内容)。

为了具体回答您的问题,_id 可以在客户端插入的情况下在浏览器中生成,但其有效性最终会在服务器上进行检查。

编辑:我最初假设 Meteor 试图从重复密钥错误中恢复并生成一个新密钥以避免重复并将其传播到客户端,我测试了用例并发现我错了,谢谢@感谢 Tom Freudenberg 指出这一点。