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);
我使用 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);