首页 > 解决方案 > MongoDB,如何将事务设置为 CRUD?

问题描述

在我的项目中有一个包含findOneand的方法。updateOne

当我的服务器出现延迟并立即处理延迟的请求时。

并在宝贵的方法运行findOne之前带来数据。updateOne

特定列的值不应低于零,但这种现象导致(-)。

我可以在没有副本的 MongoDB 中将事务设置为 CRUD 吗?

如果我不能,我该如何处理这种情况?

这是我的代码示例。

1) 文件

{ _id: ObjectID, name: 'name', stack: 100 }

2)方法(检查和减少堆栈)

let method = async (req, res) => {
    let pool = await db.connect()
    let findTarget = await pool.collection('storage').findOne({ _id: req.targetID })
    if((findTarget.stack - req.stackCountToReduce) > 0 ) {
        let update = await pool.collection('storage').updateOne(
            { _id: req.id },
            { $set: { stack: { $inc: req.stackCountToReduce }}}
        )
    }
}

3)延迟后(每个请求减少30个堆栈)

{ _id: OjbectID, name: 'name', stack: -140 }

标签: node.jsmongodb

解决方案


推荐阅读