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

Zia*_*iac 3 meteor minimongo

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

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

sai*_*unt 5

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

Collection.insert作为特殊情况实现Meteor.method,我们知道客户端模拟同时在客户端上运行,触发相应的服务器操作,客户端文件随其本地生成一起发送到服务器_id.

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

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

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

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

  • 你对这个序列100%肯定吗?什么是关于我自己直接设置_id如:`col.insert({id:'mykey',...});`.这是有效的,在这种情况下,您遇到密钥违规错误.从我的观点来看,_id始终是由内部Mongo.ObjectID()方法(http://docs.meteor.com/#/full/mongo_object_id)生成的(如果不是如上所述).所以我几乎可以肯定,一旦指定,在插入期间或之后永远不会改变_id.如果它不适合,总会出现错误. (2认同)