数据库操作插入现在似乎是在插入后立即同步返回 _id,因此这里不需要回调。
问题在于在哪里生成(和检查)_id,因为这似乎是在 miniMongo 上完成的快速同步操作,但是没有某个集合的 _id 的完整列表,miniMongo 如何检查是否_id 是否重复?
在Collection.insert
客户端使用时,使用随机 uuid 算法_id
在客户端生成,因此看似完美的延迟补偿客户端插入。
Collection.insert
作为一个特例实现Meteor.method
,我们知道在客户端运行客户端模拟的同时,触发了相应的服务器操作,客户端文档连同其本地生成的文档一起发送到服务器_id
。
在服务器上,检查_id
是否正确(真正唯一)并且服务器将有效插入确认回客户端。
如果生成的客户端_id
毕竟不是唯一的,那么插入将失败并出现“重复键错误”(这可能发生在 0.001% 的时间 - 概率甚至更低,您将不得不重新提交您的客户端表单或其他任何内容)。
为了具体回答您的问题,_id
可以在客户端插入的情况下在浏览器中生成,但最终在服务器上检查其有效性。
编辑:我最初假设 Meteor 试图从重复密钥错误中恢复并生成一个新密钥以避免重复并将其传播到客户端,我测试了用例并发现我错了,感谢@Tom Freudenberg 指出这一点出去。