首页 > 解决方案 > 使用 swift 从 firebase 数据库中删除特定值

问题描述

Firebase 数据库

在此处输入图像描述

我尝试使用这段代码,但它似乎不起作用。我取用户选择的名称并将其存储在 nameList 中。

假设我将 Blake Wodruff 存储在 nameList[0] 中。如何仅删除该名称?

var nameList = [String](repeating: "", count:100)

func remove() {

        print(nameList[countAddNames])
        
        let usernameRef =  Database.database().reference().child("Candidate 1").child("alton").child(nameList[countAddNames]);
        usernameRef.removeValue();
    }

标签: swiftfirebasefirebase-realtime-database

解决方案


要写入或删除节点,您必须指定其整个路径。因此,要从 JSON 中删除节点0,您可以:

let usernameRef =  Database.database().reference().child("Candidate 1").child("alton").child("0");
usernameRef.removeValue();

或者更短一点:

let usernameRef =  Database.database().reference().child("Candidate 1/alton/0");
usernameRef.removeValue();

如果您只知道要删除的用户的名称,则需要先查找其索引/完整路径,然后才能将其删除。如果您的应用程序中已有数据,则可以在该代码中执行此操作。否则,您可能必须使用数据库查询(特别是.queryOrderedByValueand .queryEqualToValue)来确定值在数据库中的位置。

另请参阅:删除 Firebase swift 中的特定子节点


从 JSON 结构中删除值后,Firebase 可能不再将其识别为数组。因此,强烈建议您不要将数组用于您拥有的结构。事实上,我会将您的数据建模为一个集合,在 JSON 中它看起来像:

"alton": {
  "Jake Jugg": true,
  "Blake Wodruff": true,
  "Alissa Sanchez": true
}

这将自动:

  1. 防止重复,因为根据定义,每个名称只能出现一次。
  2. 用他们的名字删除候选人就像Database.database().reference().child("Candidate 1/alton/Jake Jugg").removeValue()

有关这方面的更多信息,另请参阅我对Firebase 查询的回答,如果子项的子项包含值


推荐阅读