在我的Firebase数据库中,我需要一次写入两个位置。我有两个位置的规则,确保用户无法在不同时写入其他位置的情况下写入。
对这些位置之一的写入需要是递增/递减。当然,这必须通过事务来完成,否则我不能保证用户不会覆盖其他用户对同一节点的同时递增/递减更新。
问题是,我找不到任何关于将多位置更新与事务相结合的文档。这不可能吗?
答案 0 :(得分:8)
没有。事务在单个节点上运行。
这意味着如果要运行多位置事务,则必须在"最低级别共享节点上运行该事务"在树上。这几乎不是一个好主意。
另一种方法是使用服务器端安全规则保护您的多位置写入。有关此示例,请参阅Is the way the Firebase database quickstart handles counts secure?,它基本上使用安全规则构建比较和设置操作。
答案 1 :(得分:2)
现在可以通过引入ServerValue.increment()
示例:
Map<String, Object> postLikeUpdate = new HashMap<>();
postLikeUpdate.put("postLikedBy/" + postId + "/" + userId, true);
postLikeUpdate.put("likesCount/" + postId, ServerValue.increment(1));
FirebaseDatabase.getInstance().getReference().updateChildren(postLikeUpdate);