The $inc
修饰符可用于增加字段(例如分析计数器、页面浏览量等)。
如果有并发请求,它如何工作?
假设我有文件:
{ "views" : 1 }
如果有两个并发请求使用时会发生什么$inc
?观看次数是 2 还是 3?
这确实有点宽泛,但我可以提供大致的思路。截至 MongoDB 使用集合级锁定使用默认存储引擎。还有可用的 WiredTiger 存储引擎,它实现了文档级锁定。但基本上在所有版本中,每个请求都会发生某种程度的“锁定”。根据您的实际吞吐量需求,级别越细越好。
本质上,没有两个请求实际上同时发生,因为它们会“阻塞”所发出的锁,直到它被释放。所以将返回的值(比如说findAndModify()request ),将是发出该请求时的“当前状态”。
因此,对于这样的请求,首先执行的语句将返回值 2,下一个执行的语句将返回值 3。数据库中的结束位置是该值目前为 3。
因此,某些东西不可能同时“修改”,最终状态将是在发出“所有”请求之后发生的状态。所以$inc
其他操作员完全按照他们应该做的那样,根据文档实际能够访问时的状态修改内容。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)