【问题标题】:Update multiple nodes and increment value by 1 in atomic style以原子样式更新多个节点并将值增加 1
【发布时间】:2017-01-18 14:59:33
【问题描述】:

我必须更新我的代码并通过将节点的值增加 1 来实现对节点的另一个子更新。我当前的代码如下所示(工作正常):

String key = database.child("rides").push().getKey();

Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/rides/" + key, ride.toMap());
childUpdates.put("/ridesUser/" + ride.getUserID() + "/ownRides/" + key, ride.getTime());

database.updateChildren(childUpdates, new DatabaseReference.CompletionListener() {
    @Override
    public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
    }
});

添加增量代码的简单方法是:

childUpdates.put("/stations/" + ride.getFromID() + "/rideCount", fromStation.getRideCount() + 1);

fromStation.getRideCount() 可能已经过时,如果其他用户添加了此站的行程。 我已经阅读了几篇关于使用事务递增值的文章。如何结合子更新和事务?我是否应该在"/stations/" + ride.getFromID() 上运行交易并在doTransaction() 方法中更新我的孩子?这是原子的吗?

【问题讨论】:

    标签: firebase firebase-realtime-database


    【解决方案1】:

    如果您已阅读多篇文章,您可能已经看到:不可能将多位置更新和事务结合起来。

    您的选择:

    1. 在树中的最低公共级别执行事务

    2. 使用安全规则为您的多位置更新实施伪事务。见this answer from Katothis more recent answer from me

    3. 从客户端写入“更改记录”,然后让服务器(不太可能面临争用)以事务方式进行更新。例如,请参阅我对这个问题的回答:When should you use Firebase Transactions

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2019-07-13
      • 2018-03-02
      相关资源
      最近更新 更多