【问题标题】:Firebase Realtime Database, delete duplicate recordsFirebase 实时数据库,删除重复记录
【发布时间】:2021-02-23 17:40:01
【问题描述】:

由于我的队列管理器中的错误,我的系统最终在我的实时数据库中插入了数千次相同的记录。我想知道是否有办法删除重复记录并只保留一条?

查看打印:

【问题讨论】:

  • 当然,您可以编写代码来删除您不想要的子节点。请编辑问题以显示未按您期望的方式工作的代码。我不认为它会为你写。
  • 你为什么不阅读你想要的节点。然后删除顶级节点'632A9...'(这将删除节点中的所有内容),然后写出您读入的节点。这应该是快速而轻松的。
  • @Jay 是在更正之后,其他应该在这个级别的数据 '632A9 ...' 被包括在内。
  • 对。这就是意图。读取要保留的数据,删除“632A9 ...”节点,然后使用相同的节点键“632A9 ...”将数据写回

标签: firebase firebase-realtime-database


【解决方案1】:

根据您用于写入数据的内容(云功能、移动应用),您需要运行一次性代码来删除现有数据(假设您修复了写入冗余数据的错误)。

看到你的数据库,删除代码可以遵循这个伪代码:

if(<node_parent> != <the_node_you_want_to_keep> 
  && <node_parent>/"Commentario" == <the_comment_that_got_repeated>
  && <node_parent>/"CodUsario" == "1")
    delete node

您可以比较不同的字段以确保只删除重复的数据。

【讨论】:

    【解决方案2】:

    我认为最简单的解决方案是读入要保留的数据,然后删除整个节点,然后写出保留的数据。

    换句话说,您知道您想要的顶级路径632A9... 和子节点-MLrf6...。因此,在-MLrf6...' 处读取子节点,然后删除顶级节点632A9...,其中一个命令可以满足您的要求。然后简单地写回数据

    let ref = your_firebase.child("632A9...").child("-MLrf6...")
    ref.setData(the child data that was read in before deleting)
    

    【讨论】:

      猜你喜欢
      • 2019-12-24
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      相关资源
      最近更新 更多