如何在Firebase DB中更新子项的特定值

时间:2016-09-13 04:53:31

标签: ios swift firebase firebase-realtime-database

我正在关注此document。以下是我的更新代码:

func updateDealResultToServer(key:String,dealResult : String)
{

    let post = ["dealResul": dealResult]
    let childUpdates =
        ["/komal_xyz/\(key)": post
        ]

    rootRef.updateChildValues(childUpdates)

}

这是我的Firebase数据库结构: enter image description here

我只想更改dealResult的值。每当我尝试为1473670100726之类的特定子节点运行上述代码时,将删除除dealResul之外的其他值。

3 个答案:

答案 0 :(得分:7)

要更新Firebase实时数据库中特定节点的值,请使用: -

  • 您可以使用 runTransactionBlock:

      func updateTotalNoOfPost(completionBlock : (() -> Void)){
    
    
    let prntRef = FIRDatabase.database().reference().child("komal_kyz").child(your_AuroID).child("dealResul")
    
    prntRef.runTransactionBlock({ (resul) -> FIRTransactionResult in
        if let dealResul_Initial = resul.value as? Int{
    
            //resul.value = dealResul_Initial + 1
            //Or HowSoEver you want to update your dealResul. 
             return FIRTransactionResult.successWithValue(resul)
        }else{
    
            return FIRTransactionResult.successWithValue(resul)
    
        }
        }, andCompletionBlock: {(error,completion,snap) in
    
                print(error?.localizedDescription)
                print(completion)
                print(snap)
            if !completion {
    
               print("Couldn't Update the node")
            }else{
    
                completionBlock()
            }
        })
    
     }
    

    调用此功能时: -

    updateTotalNoOfPost{
           print("Updated")
          }
    
  • 只需致电 updateValues

        let prntRef  = FIRDatabase.database().reference().child("komal_kyz").child(your_AuroID)
        prntRef.updateChildValues(["dealResul":dealResult]) 
    

PS: - 如果您只想增加特定节点,则首选使用 runTransactionBlock: 而不是 .updateChildValues 。另请阅读: - https://stackoverflow.com/a/39458044/6297658

答案 1 :(得分:5)

我建议使用setValue进行单个子更新(请记住我使用的是Swift 3,可能会有轻微的语法更改,但您应该没问题):

rootRef.child("komal_kyz").child(key).setValue(["dealResul":dealResult])

答案 2 :(得分:1)

let ref = FIRDatabase.database().reference().root.child("users").child("childKey").updateChildValues(["childKeyForUpdate": "NewData"])