Node.js Firebase RTDB批处理事务(同时增加2个值)

Node.js Firebase RTDB批处理事务(同时增加2个值),node.js,firebase,firebase-realtime-database,transactions,atomic,Node.js,Firebase,Firebase Realtime Database,Transactions,Atomic,我知道,您可以使用update进行批处理的、原子的全有或全无更新,但是您可以对事务执行相同的操作吗 目前,我正在尝试在接受好友请求的同时增加用户好友数(2个用户) 这里是我正在做的工作,但如果出现问题,它将导致坏的数据不一致,发生了几次 const upOneFriend = firebase .database() .ref("users") .child(friend.uid) .child("friendCount"); const upOneCur

我知道,您可以使用update进行批处理的、原子的全有或全无更新,但是您可以对事务执行相同的操作吗

目前,我正在尝试在接受好友请求的同时增加用户好友数(2个用户)

这里是我正在做的工作,但如果出现问题,它将导致坏的数据不一致,发生了几次

  const upOneFriend = firebase
    .database()
    .ref("users")
    .child(friend.uid)
    .child("friendCount");
  const upOneCurrentUser = firebase
    .database()
    .ref("users")
    .child(userUid)
    .child("friendCount");
  upOneFriend
    .transaction(currentCount => {
      return currentCount + 1;
    })
    .then(() => {
      upOneCurrentUser.transaction(currentCount2 => {
        return currentCount2 + 1;
      });
    })
    .catch(() => {
      console.log("error increment");
    });
正如我所说,这是可行的,但我需要同时做到这一点!我环顾四周,没有发现任何与实时数据库的批处理事务相关的内容


干杯。

Firebase实时数据库中的事务在单个节点上工作。如果需要更新事务中的多个节点,则需要在要更新的节点之上的第一个公共节点上运行事务。在您的场景中,这意味着您要跨
用户运行事务,这可能会显著降低吞吐量

另一种方法是使用多位置更新。但是,由于多位置更新不会自动防止并发写入,因此必须在写入本身中包含防止并发写入的信息


有关这方面的示例,请参见我的答案:,并且

感谢您的回复!我不清楚这一点,是否有任何例子,你可以带我到,或者你能给我一个小代码片段,看看如何可以做到这一点?添加了一个链接到一个例子,虽然没有明确的复制/粘贴的例子。老实说,除非你已经对Firebase很有经验,否则我建议你还是坚持第一段。@hugger你有过这样的经历吗?如果我的答案有用,请单击向上投票按钮(▲) 如果它回答了您的问题,请单击复选标记(✓) 接受它。这样别人就会知道你已经得到了(足够的)帮助。也请参见