【问题标题】:Unable to delete an item from multiple collections in firebase无法从 Firebase 中的多个集合中删除项目
【发布时间】:2020-08-01 09:03:51
【问题描述】:

我在 firebase 中有两个集合,比如 A 和 B。当我将一个项目添加到其中一个集合(比如 A)时,它会自动添加到另一个集合 B。但是当我从集合 A 中删除一个项目时,它仍然保留在另一个集合 B.

Shot from firebase console

当我从集合 A 中删除一个项目时,它仍保留在另一个集合 B 中。

我无法弄清楚如何删除两个集合中的项目?

请帮忙。

【问题讨论】:

    标签: firebase dart google-cloud-firestore google-cloud-functions


    【解决方案1】:

    这不是关系数据库。在 Sql、Postgresql、Firebird 等关系数据库中可以进行级联更新/删除……在 No-SQL 中,一个文档与另一个文档没有任何关系。更希望将一些数据克隆到两个或多个文档中,而不是为其创建单独的文档。

    但也许你可以通过使用引用类型来实现你想要的?我种了一两次,检查一下可能是个好主意。但作为描述,它只是一个带有路径/引用的字段,没有魔法here

    official doc:

    如果您想在删除父文档时删除子集合中的文档,则必须手动执行此操作,如删除集合中所示。

    因此,您要么重新考虑 DB 模型,要么必须手动跟踪要删除的每个元素。

    【讨论】:

      【解决方案2】:

      您有两种方法可以做到这一点:

      从客户端使用批量写入 (more here)

      DocumentReference doc_1_reference = firestore.collection("messages").document(doc_1_uid);
      DocumentReference doc_2_reference = firestore.collection("messages").document(doc_2_uid);
      
      final batchWrite = firestore.batch();
      
      batchWrite.delete(doc_1_reference);
      batchWrite.delete(doc_2_reference);
      
      await batchWrite.commit();
      

      使用 Cloud 功能,通过向文档添加删除触发器,并在触发时执行其他文档的删除。鉴于您已经知道应该删除哪个文档,这并不难(read about it here

      【讨论】:

      • 在您的应用程序中!无论您在哪里调用删除功能。请查看链接以获取示例和更多信息。
      猜你喜欢
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-17
      • 1970-01-01
      相关资源
      最近更新 更多