【问题标题】:Replacing multiple values in Firebase替换 Firebase 中的多个值
【发布时间】:2021-07-12 12:46:18
【问题描述】:

有没有一种方法可以根据某些标准快速替换 Firebase 快照中的值。例如,我希望将所有“用户名”替换为值“xyz”,其中 userId = userId_0001(userId 不是唯一的)。到目前为止,这是我的代码:

let databaseRef = Database.database().reference().child("usernames").queryOrdered(byChild: "userId").queryEqual(toValue: "userId_0001")
    databaseRef.observe(.value, with: { (snapshot) in
        
            for childSnapshot in snapshot.children {
                let username = value?["username"] as? String ?? ""
                username.setValue("xyz")
    })

}

【问题讨论】:

  • 乍一看,该代码看起来不错。运行时有什么问题?
  • 是用户ID的错别字吗?图片显示userId_001,您的代码引用userId_0001
  • 该代码存在许多问题。照原样,它不会编译也不会运行,我不确定这应该做什么; value?["username"] as? String ??。即使它已编译,userName 也将是一个字符串,因此 username.setValue("xyz") 将不起作用。我认为您正在尝试在 Firebase 中设置该值?如果是这样,请查看入门指南Write Data。您能否包含您尝试过的实际代码?

标签: swift firebase firebase-realtime-database firebase-authentication


【解决方案1】:

问题中的代码存在一些问题,代码中的查询值 (userId_0001) 与屏幕截图中的值不匹配 (userId_001)

根据我收集到的信息,您想在 firebase 中查询用户 ID 为 userId_001(与您的屏幕截图匹配)的节点,对于这些节点,将现有的 username 值替换为 xyz

这是执行此操作的代码

func replacer() {
    let databaseRef = Database.database().reference().child("usernames").queryOrdered(byChild: "userId").queryEqual(toValue: "userId_0001")
    databaseRef.observe(.value, with: { snapshot in
        let childSnaps = snapshot.children.allObjects as! [DataSnapshot]
        for snap in childSnaps {
            snap.ref.child("username").setValue("xyz")
            -- or --
            snap.ref.updateChildValues(["username": "xyz"])
        }
    })
}

我在 for 循环中包含两个选项。只用一个。 updateChildValues 的好处是您可以根据需要一次替换父节点中的多个值。

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 1970-01-01
    • 2022-01-22
    • 2021-01-05
    • 2013-07-06
    • 2023-03-15
    • 2016-03-29
    • 2020-06-15
    • 2021-01-01
    相关资源
    最近更新 更多