我必须通过将其值增加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()
方法中更新吗?这是原子的吗?
答案 0 :(得分:3)
如果您已阅读过多篇帖子,您可能已经看过这个帖子:无法将多位置更新和交易结合起来。
您的选择:
在树的最低公共级别执行交易
使用安全规则为您的多位置更新实施伪事务。请参阅this answer from Kato或this more recent answer from me
写下&#34;更改记录&#34;从客户端然后让服务器(不太可能面临争用)以事务方式执行更新。例如,请参阅我对此问题的回答:When should you use Firebase Transactions