Swift 替换Firebase中的多个值

Swift 替换Firebase中的多个值,swift,firebase,firebase-realtime-database,firebase-authentication,Swift,Firebase,Firebase Realtime Database,Firebase Authentication,是否有一种方法可以根据特定条件快速替换firebase快照中的值。例如,我希望将所有“username”替换为值“xyz”,其中userId=userId_0001(userId不是唯一的)。这是我目前的代码: let databaseRef = Database.database().reference().child("usernames").queryOrdered(byChild: "userId").queryEqual(toValue: &qu

是否有一种方法可以根据特定条件快速替换firebase快照中的值。例如,我希望将所有“username”替换为值“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")
    })

}

问题中的代码存在一些问题,代码中的查询值(
userId\u 0001
)与屏幕截图中的值不匹配(
userId\u 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"])
        }
    })
}

I在for循环中包括两个选项。只使用一个。updateChildValues的好处在于,如果需要,您可以一次替换父节点中的多个值。

我乍一看,这段代码很好。运行时有什么问题?是用户ID的输入错误吗?此图显示了
userId\u 001
,您的代码引用了
userId\u 0001
。该代码存在许多问题。就目前而言,它既不会编译也不会运行,我不确定这应该做什么<代码>值?[“用户名”]作为?字符串???。即使已编译,userName也将是一个字符串,因此
userName.setValue(“xyz”)
将无法工作。我想你是想在Firebase中设置这个值?如果是,请查看《入门指南》。你能包括你尝试过的实际代码吗?