根据文档:
每个由Mongoose首次创建的文档都会设置versionKey属性。该键的值包含文档的内部修订版本。此文档属性的名称是可配置的,默认为__v。如果这与您的应用程序发生冲突,可以进行配置。
除非您知道自己在做什么,请勿将文档版本控制设置为false。但我好奇,在哪些情况下禁用此功能是安全的?
版本键的目的是进行乐观锁定。
启用后,每当更新文档时,版本值会自动递增。
这使得应用程序代码能够测试在获取(例如获取版本键42)和随后的更新(确保版本值仍为42)之间是否已经进行了更改。 如果版本键具有不同的值(例如43,因为对文档进行了更新),则您的应用程序代码可以处理并发修改。
在关系数据库中,通常使用相同的概念,而不是会带来恶劣性能的悲观锁定。所有体面的ORM都提供此功能。例如,在Java中实现的对象数据库ObjectDB文档中很好地描述了它。
博客文章链接到Behlül的评论中展示了乐观锁的有用性,并提供了具体的示例,但仅适用于数组更改,请参见下文。
相反地,这里有一个简单的案例,其中它是无用的:用户配置文件只能由其所有者编辑。在这种情况下,您可以摆脱乐观锁定并假设最后一次编辑总是获胜。mongoose-orm
邮件列表中找到了explanation ,非常清晰:如果您需要其他字段的乐观锁定,则需要自行处理。add
操作。再次强调,如何处理取决于您的用例,但这应该足以让您入门。$in
运算符来访问子文档,是否需要版本控制呢?对我来说,这似乎与访问父文档没有什么不同。 - Behlül