【问题标题】:Firebase - How to delete many entries at once?Firebase - 如何一次删除多个条目?
【发布时间】:2017-07-24 15:26:16
【问题描述】:

如何删除给定推送 ID 的所有项?

例如,假设 KoxoxwTqfb50E1Gvi9F 推送 ID 在我的数据库的许多位置,即在许多键下,我想一次删除 KoxoxwTqfb50E1Gvi9F 的所有条目,而不是静态删除所有条目(因为我知道它们的位置)。

换句话说,有没有办法告诉 Firebase“删除整个数据库中KoxoxwTqfb50E1Gvi9F 的所有条目”?

【问题讨论】:

  • 没有我听说过的。你的情况到底有什么必要性?您想在客户端保持简单吗?您只是想确保删除所有内容吗?
  • 您必须了解所有可能出现的位置并自行管理它们。数据库不了解您的数据结构 - 它只是一个容器,您可以随心所欲地做任何事情。
  • 如果没有自定义功能,我不确定这是否可行。您可以查看 Firebase 函数,您可以使用它为特定位置创建一个侦听器,然后让它删除同一键的所有其他值。
  • 请看我的回答。

标签: android firebase


【解决方案1】:

为了从数据库中删除多个条目,您需要知道所有这些位置(参考)。所以换句话说,在你添加数据的方式上,你也应该删除它。

假设您的数据库如下所示:

Firebase-root
   |
   --- Users
   |     |
   |     --- userUid1
   |     |      |
   |     |      --- //user1 data
   |     |
   |     --- userUid2
   |            |
   |            --- //user2 data
   |
   --- Groups
         |
         --- groupId1
         |      |
         |      --- //group1 data
         |      |
         |      --- Users
         |            |
         |            --- userUid1: true
         |            |
         |            --- userUid3: true
         |
         --- groupId2
                |
                --- //group2 data

我建议你使用下面的方法:

private static void deleteUser(String userId, String groupId) {
    Map<String, Object> map = new HashMap<>();
    map.put("/Users/" + userId + "/", null);
    map.put("/Groups/" + groupId + "/Users/" + userId + "/", new HashMap<>().put(userId, null));
    //other locations
    databaseReference.updateChildren(map);
}

此方法自动删除所有这些条目。使用这些路径,您可以通过一次调用 deleteUser() 方法同时更新 JSON 树中的多个位置。以这种方式进行的同时删除是原子的:要么所有更新成功,要么所有更新失败。

希望对你有帮助。

【讨论】:

  • 是否需要一个按键来同时更新?
  • @DragonFire 不,在添加数据时需要 push() 方法,而不是在更新数据时,因为它每次调用都会创建一个新的随机密钥。为了创建更新,您需要知道所有节点名称,您不需要创建新的。
猜你喜欢
  • 1970-01-01
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
相关资源
最近更新 更多