Firebase的updateChildValues方法是否兼具更新与新增值功能?
关于Firebase
updateChildValues方法的功能确认 你完全没看错!Firebase Realtime Database的updateChildValues方法确实同时支持更新已有节点和创建不存在的节点,这是它设计里自带的实用特性,很多初学者刚接触时都会有这个疑问~
具体原理说明
这个方法的核心逻辑是「数据合并」:
- 当你传入的字典中,某个键在目标节点下已经存在,该键对应的旧值会被新值覆盖;
- 当这个键在目标节点下不存在,Firebase会自动在该路径下创建这个新的键值对。
结合你的代码实例分析
看你提供的这段代码:
@objc func handleRegister () { guard let email = emailTextField.text, let password = passwordTextField.text else { print("Form is not valid") return } Auth.auth().createUser(withEmail: email, password: password) { (user, error) in if error != nil { print(error) return } //successfully authenticated user let ref = Database.database().reference(fromURL: "https://my-awesome-project-18f30.firebaseio.com") ref.updateChildValues([ "someValue" : 123123]) } }
这里的ref指向了数据库的根节点,当根节点下没有someValue这个键时,调用updateChildValues就会直接创建这个键并赋值为123123;如果后续再次调用这段代码,根节点下的someValue就会被更新为123123(如果值没改的话看起来没变化,但逻辑上是执行了覆盖操作)。
额外补充:和setValue的区别
顺便提一句,updateChildValues和setValue的核心差异在于:
setValue会替换目标节点下的所有数据,比如如果根节点原来有其他键,调用setValue(["someValue":123123])会把其他键全部删除,只留下someValue;updateChildValues只会修改你指定的键,其他已有键会被保留,这也是它更适合做局部更新或新增数据的原因。
内容的提问来源于stack exchange,提问作者Ninja
相关产品推荐
相关产品推荐

