使用 Firebase 实时数据库批量创建/删除
Posted
技术标签:
【中文标题】使用 Firebase 实时数据库批量创建/删除【英文标题】:Batch create/remove with Firebase Real time db 【发布时间】:2021-10-20 10:45:48 【问题描述】:我像这样使用 Firebase 实时数据库:
createSoldLead(soldLead: SoldLeadModel): void
const soldLeadsReference = this.angularFireDatabase.list<SoldLeadModel>(
`groups/$this.groupId/soldLeads`
);
const leadsReference = this.angularFireDatabase
.list<SoldLeadModel>(
`groups/$this.groupId/leads`
);
soldLeadsReference.set(soldLead.id.toString(),soldLead);
leadsReference.remove(soldLead.id.toString());
这工作正常。但是我怎样才能做到这一点作为批量创建/删除呢?即确保他们都成功
我看到了this blog。但不知道如何在我的用例中应用它?
【问题讨论】:
你想阻止 2 次写入还是要确保它们都成功(即有某种事务)? @MikeOne 我需要这个make sure they both succeed
但transaction
在这里不起作用。在 Firebase 上有所不同:firebase.google.com/docs/database/web/…
是的,因此是“某种”????。除非您更改数据模型,否则这不容易解决..
@MikeOne 无需更改数据模型。请看答案。
【参考方案1】:
您可以使用单个多路径更新在不同路径写入多个节点。
相当于你的两个电话将是这样的:
let updates = ;
updates[`groups/$this.groupId/soldLeads/$soldLead.id`] = soldLead;
updates[`groups/$this.groupId/leads/$soldLead.id`] = null;
firebase.database().ref().update(updates);
将节点值设置为 null
会删除该节点。
【讨论】:
对不起,我不清楚。即你在哪里使用这个updates
来讲述对firebase 的更改?还有如何用 Angularfire 而不是这条线来做到这一点? firebase.database().ref().update(soldLead.id.toString());
糟糕,我将错误的对象传递给数据库。那应该是firebase.database().ref().update(updates);
我现在也在答案中修复了它。我不完全了解 AngularFire 语法,这就是我展示底层 SDK 调用的原因,但这看起来很有希望:github.com/angular/angularfire/issues/435。
太棒了。这是一件了不起的事情。非常感谢。【参考方案2】:
在这里你可以看到AngularFire
版本。
createSoldLead(soldLead: SoldLeadModel): void
const updates = ;
updates[`groups/$this.groupId/soldLeads/$soldLead.id.toString()`] =
...soldLead,
createdBy: this.createdBy,
createdDate: this.createdDate,
;
updates[`groups/$this.groupId/leads/$soldLead.id.toString()`] = null;
this.angularFireDatabase.object('/').update(updates);
【讨论】:
以上是关于使用 Firebase 实时数据库批量创建/删除的主要内容,如果未能解决你的问题,请参考以下文章
在 Firebase 函数中为实时数据库使用 onWrite 触发器