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