Node.js 在mongodb中,是否可以创建包含2个查询的事务?比如单独查找和更新?
我使用mongodb(与mongoose一起使用),我发现了一个文档,运行了一系列复杂的条件检查,然后更新了文档 这很好,但现在我想确保在我的条件运行期间,我最终更新的文档没有被其他更新查询更新Node.js 在mongodb中,是否可以创建包含2个查询的事务?比如单独查找和更新?,node.js,mongodb,transactions,Node.js,Mongodb,Transactions,我使用mongodb(与mongoose一起使用),我发现了一个文档,运行了一系列复杂的条件检查,然后更新了文档 这很好,但现在我想确保在我的条件运行期间,我最终更新的文档没有被其他更新查询更新 我是否可以创建一个锁或以某种方式在事务中包含所有这些操作?您可以添加一个简单的字段编辑器,并确保在更新时每个进程都拥有文档的所有权 下面是一个简单的例子: let processId = uniqueID; //if doc is none then a different process 'owns
我是否可以创建一个锁或以某种方式在事务中包含所有这些操作?您可以添加一个简单的字段
编辑器
,并确保在更新时每个进程都拥有文档的所有权
下面是一个简单的例子:
let processId = uniqueID;
//if doc is none then a different process 'owns' it. need to decide on behaviour.
let doc = await collection.findOneAndUpdate({_id: docId, editor: {$exists: false}}, {$set: {editor: processId}})
### do calculations. ###
let newValue = calculatedValue;
let newDoc = await collection.findOneAndUpdate({_id: docId, editor: processId}, {$unset: {editor: ""}})
我觉得在评论中使用as-suggjested有点过分,从文档中可以看出:
在MongoDB中,对单个文档的操作是原子的
及
对于需要对多个文档进行原子性读写的情况,MongoDB支持多文档事务
事务适用于比这更复杂的情况,我觉得不需要这种开销,因为一个简单的解决方案就足够了。您可以试试