使用 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 succeedtransaction 在这里不起作用。在 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实时数据库中删除?

在 Firebase 函数中为实时数据库使用 onWrite 触发器

使用 android studio java Recycler 视图从 Firebase 实时数据库中删除一个节点

Firebase -- 批量删除子节点

从 Firebase 身份验证中删除用户

如何在 firebase 实时数据库中删除我的数据?