收藏
回答

云数据事务报错:ResourceUnavailable.TransactionConflict?

"document.update:fail [ResourceUnavailable.TransactionConflict] Transaction is conflict, maybe resource operated by others. Please check your request, but if the problem persists, contact us.; at document.update api; "

云数据库的一个简单事务处理,代码如下:


    const cmd = db.command;

    const updtranscation = await db.startTransaction();


    res = await updtranscation.collection('xinfo').doc(_id).update({

      data: info

    });


    if(info.total_pay>0){

      res = await updtranscation.collection("xaction").doc(info._id).update({

        data:{

          total_pay:cmd.inc(info.total_pay)

        }

      });

    }


    updtranscation.commit();


回答关注问题邀请回答
收藏

2 个回答

  • 他乡之客
    他乡之客
    2020-02-15

    您好:

    此报错由于调用数据库返回WriteConflict导致。请看下不同事务中是否会同时对同一资源进行写操作?

    2020-02-15
    有用
    回复 5
    • 肖锦???
      肖锦???
      2020-02-16
      是不是同一session 中的不同事务同一资源进行写操作吗?
      也就是同一个云函数中 开启了两个Transcation,他们对一个document进行update操作对吗。
      2020-02-16
      回复
    • 他乡之客
      他乡之客
      2020-02-16回复肖锦???
      对的,这种如果两个事务同时操作一个doc,可能会有冲突哈
      2020-02-16
      1
      回复
    • 阿康.sol
      阿康.sol
      2021-05-02
      不同事务中是否会同时对同一资源进行写操作指的是?我可以理解成:两个用户参与投票,同时去执行云函数A,给云函数A里面的投票活动总票数执行_.inr(1)操作,这样就算冲突吗?因为两个用户在他们各自的执行单元中的事务都在写投票活动总票数这个字段?
      2021-05-02
      回复
    • 他乡之客
      他乡之客
      2021-06-23回复阿康.sol
      inr这个操作相对来说比较原子可控,可能得测试验证一下。关键是我们数据库的隔离级别并没有暴露给用户去选择,所以会有一些地方会踩坑
      2021-06-23
      回复
    • m蛋o蛋m
      m蛋o蛋m
      2023-03-13回复阿康.sol
      这种冲突该怎么处理呢?
      2023-03-13
      回复
  • 肖锦???
    肖锦???
    2020-02-15

    当然上面的问题:多尝试几次,就会成功的

    2020-02-15
    有用
    回复
登录 后发表内容
问题标签