1
sunkai0609 2022-10-09 15:05:28 +08:00
mongodb 单文档操作应该是原子的吧
|
2
dumbbell5kg OP @sunkai0609 我理解单文档的原子性是指,一条语句更新多个字段,要么字段都更新成功,要么都更新失败,不太清楚原子性和问题有什么关系
|
3
sunkai0609 2022-10-09 15:36:55 +08:00
@dumbbell5kg 额,就是即使你并发请求,在 mongodb 处理时可以看做是顺序执行的。我是这么认为的,不保真。。
|
4
leopod1995 2022-10-09 16:00:48 +08:00
不会。
首先"并发"是一个宏观概念上的并发,在底层执行一定是有序执行。在 mongodb 层面,每个 op 都有自己的时间戳,用来保证事务的执行顺序。所以结果是 1/2 任意一条先执行,返回包含 2 条记录的数组的原文档,然后第二个 op 返回包含 1 条记录的新文档。 When modifying a single document, both db.collection.findAndModify() and the updateOne() method atomically update the document 。 |
5
dumbbell5kg OP @leopod1995 查了一个多小时的文档,我现在理解 mongo 是用锁来保证原子性的,既然有锁,那么 findAndModify 一定是顺序执行的
|
6
dumbbell5kg OP 感谢大佬们
|
7
dumbbell5kg OP @leopod1995 另外其实我是想用 findAndModify 返回更新后的结果的,所以才问了这个问题
|