Flutter Firebase Realtime Database write/update 一次到多个节点

Flutter Firebase Realtime Database write/update to multiple nodes at once

我使用 Firebase 作为我的 Flutter 项目的后端。我需要在一个事务中写入多个节点。现在我有:

await (_firebaseDatabase
        .reference()
        .child('user_data').Push().set({"userName":"aaa"}));
await (_firebaseDatabase
        .reference()
        .child('user_history').Push().set({"userName":"aaa"}));

但这是 2 个 transactions,所以 1 个可以成功结束,但另一个可能会失败,我想避免这种情况。

另一个用例是写入 user_data 并更新到 user_history。我们如何在 firebase 实时数据库中实现这一点?

基本上,我想在单个事务中在 2 个不同的节点插入和更新,这样数据就不会不匹配。

您正在寻找的是多路径写入操作,它允许您通过单个 update 调用写入多个非重叠路径。您可以为每个键指定要更新的完整路径,然后数据库将在该特定路径设置您指定的值。

要生成两个单独的唯一键,您可以不带任何参数调用 push() 两次。当这样调用时,它实际上并没有写入数据库,而只是生成一个唯一的客户端引用,然后您可以从中获取密钥。

结合起来,它看起来像这样:

const db = _firebaseDatabase.reference();
const key1 = db.push().key;
const key2 = db.push().key;
const values = {};
values["user_data/"+key1+"/username"] = "aaa";
values["user_history/"+key2+"/username"] = "aaa";
db.update(values);