当前位置: 首页 > 知识库问答 >
问题:

使用UpdateChildValue从Firebase中删除

姜泰宁
2023-03-14

我试图同时删除Firebase数据库中多个位置的数据。

Firebase文档声明:

"删除数据的最简单方法是在引用该数据的位置时调用RemveValue。还可以通过将nil指定为其他写入操作(如setValue或updateChildValue)的值来删除。可以将此技术与updateChildValue一起使用,在单个API调用中删除多个子级。"

我的代码是

let childUpdates = [path1 : nil,
                    path2 : nil,
                    path3 : nil,
                    path4 : nil]

    ref.updateChildValues(childUpdates)

所有四条路径都是字符串,但我得到一个错误:

“表达式类型不明确,没有更多上下文。”

我假设出现这种情况是因为nil值,因为如果我用其他任何东西(比如Int)替换nil,错误就会消失。

使用UpdateChildValue从Firebase中删除数据的正确方法是什么?我们希望它的工作方式与Firebase中的removeValue()函数类似。我们更愿意这样做的原因是,它可以在一次调用中从多个位置删除。

共有2个答案

高胜
2023-03-14

我认为这个错误来自您提供的第一行。您需要指定字典的类型。所以把它改成

let childUpdates: [String : AnyObject?] = [path1: nil, path2: nil,...]
古畅
2023-03-14

所以这里的问题是

ref.updateChildValues(childUpdates)

需要[字符串:AnyObject!]updateChildValues和AnyObject的参数!不能为nil(即不能使用AnyObject?这是一个可选选项,可以为nil)

但是,你可以这样做

let childUpdates = [path1 : NSNull(),
                    path2 : NSNull(),
                    path3 : NSNull(),
                    path4 : NSNull()]

因为任何东西!现在是一个NSNull()对象(不是nil),Firebase知道NSNull是一个nil值。

编辑

您可以在此基础上展开,也可以进行多位置更新。假设你有一个结构

items
   item_0
      item_name: "some item 0"
   item_1
      item_name: "some item 1"

您需要更新两个项目名称。这是swift代码。

func updateMultipleValues() {
    let path0 = "items/item_0/item_name"
    let path1 = "items/item_1/item_name"

    let childUpdates = [ path0: "Hello",
                         path1: "World"
    ]

    self.ref.updateChildValues(childUpdates) //self.ref points to my firebase
}

结果是

items
   item_0
      item_name: "Hello"
   item_1
      item_name: "World"
 类似资料:
  • 问题内容: 我正在尝试同时从Firebase数据库中的多个位置删除数据。 在火力地堡文档状态: “删除数据的最简单方法是在对数据位置的引用上调用removeValue。您还可以通过将nil指定为另一个写操作(例如setValue或updateChildValues)的值来进行删除。您可以将此技术与updateChildValues一起使用以进行删除一个API调用中有多个子级。” 我的代码是 所有四

  • 我的Firebase数据库存储格式如下。 但在设置存储在firebase数据库中的值时,我是这样做的。 当我写上面的代码时,我在Firebase数据库中添加了一个数据。但是它会自动在我的插入数据库格式顶部包含数据快照JsonObject,就像这样,这是错误的。 如何从Firebase的插入格式中删除此DataSnapshot?

  • 我以为上面的办法行得通,但它失败了。我把它放在渲染行部分。它出现了reference.remove失败。第一个参数必须是有效的函数。就像在这些房间里,它有信息,我认为这是我出错的地方,但我不知道如何去做它。谢谢。

  • 如何从控制台从FireBase中删除节点?由于它太大,显然我无法从控制台中删除它。通常我可以按节点名称附近的删除按钮,但它显示控制台仅出于性能原因而读取。

  • 我遵循此处的指南从firebase数据库中删除值。这是我的数据结构。 这是我正在使用的代码。 发生的情况是,在这个调用中删除了整个/bookmarks节点,而不仅仅是对所需书签的引用。如何实现只删除一个书签而不是删除整个节点?

  • 我有一个firebase数据结构,如下所示: 现在我想删除节点KJSXd4ScEmJ6N4UFc5k。但我只知道“雇员名”:塞马。我尝试删除节点时使用了: 但这不起作用,因为“无效的Firebase数据库路径:$member.Firebase数据库路径不能包含“.”、“#”、“$”、“[”或“].”” 所以我的问题是,我如何删除节点:"-KJSXd4ScEmJ6N4UFc5k"只知道:"Semah