来自文档:
versionKey是Mongoose首次创建时在每个文档上设置的属性.此键值包含文档的内部修订版.此文档属性的名称是可配置的.默认值为__v.如果这与您的应用程序冲突,您可以这样配置:
[...]
通过将versionKey设置为false,也可以禁用文档版本控制.除非您知道自己在做什么,否则请勿禁用版本控制.
但我很好奇,在哪些情况下禁用此功能应该是安全的?
esk*_*tos 27
版本的关键目的是乐观锁定.
启用后,只要更新文档,版本值就会以原子方式递增.
这允许您的应用程序代码测试是否在获取(例如,引入版本密钥42)和后续更新(确保版本值仍为42)之间进行了更改.如果版本密钥具有不同的值(例如,43因为已对文档进行了更新),则应用程序代码可以处理并发修改.
在关系数据库中经常使用相同的概念,而不是可能带来可怕性能的悲观锁定.所有下降ORM都提供这样的功能.例如,在ObjectDB文档中很好地描述了它.它是用Java实现的对象数据库,但适用相同的概念.
Behlül评论中链接的博客文章通过具体示例展示了乐观锁定的有用性,但仅针对数组更改,请参见下文.
相反,这是一个简单的案例,它无用:用户配置文件可以由其所有者自己编辑.在这里你可以摆脱乐观锁定并假设最后一次编辑总是获胜.
所以,只有你知道你的应用程序是否需要乐观锁定.用例用例.
猫鼬情况有点特殊.
仅对阵列启用乐观锁定,因为内部存储格式使用位置索引.这是问题评论中链接的博客文章所描述的问题.我发现邮件列表中给出的解释mongoose-orm非常明确:如果您需要对其他字段进行乐观锁定,则需要自己处理.
这是一个要点,展示了如何为操作实现重试策略add.同样,你想如何处理它取决于你的用例,但它应该足以让你开始.
我希望这能解决问题.
干杯
| 归档时间: |
|
| 查看次数: |
6577 次 |
| 最近记录: |