Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在mongodb中,是否可以创建包含2个查询的事务?比如单独查找和更新?_Node.js_Mongodb_Transactions - Fatal编程技术网

Node.js 在mongodb中,是否可以创建包含2个查询的事务?比如单独查找和更新?

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

我使用mongodb(与mongoose一起使用),我发现了一个文档,运行了一系列复杂的条件检查,然后更新了文档

这很好,但现在我想确保在我的条件运行期间,我最终更新的文档没有被其他更新查询更新


我是否可以创建一个锁或以某种方式在事务中包含所有这些操作?

您可以添加一个简单的字段
编辑器
,并确保在更新时每个进程都拥有文档的所有权

下面是一个简单的例子:

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支持多文档事务

事务适用于比这更复杂的情况,我觉得不需要这种开销,因为一个简单的解决方案就足够了。

您可以试试