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

时间:2015-05-08 08:50:11

标签: meteor minimongo

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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

如果客户端生成的_id毕竟不是唯一的,那么插入将失败并出现“重复键错误”(这可能发生在0.001%的时间 - 概率甚至更低,你会必须重新提交您的客户表格或其他)。

要专门回答您的问题,如果客户端插入,可以在浏览器中生成_id,但最终会在服务器上检查其有效性。

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