json - 触发查询以返回单个子项并更新值

标签 json swift firebase firebase-realtime-database

我有一个使用 .queryEqual 查询 Firebase 的函数,以获取我想要更新的节点,但我不知道如何将该值设置为 false。这是我的功能:

func addrShipDefault() {
    let ref = Router.addrShip.reference().child(self.userId)
    let query = ref.queryOrdered(byChild: "isDefault").queryEqual(toValue: true)
    query.setValue(false, "isDefault")
}

有人可以告诉我如何在 Firebase 中查询我正在查找的节点并更新其值吗?

我已经使用 ref.updateChildValues 完成了其他更新,但对于那些我知道确切路径的更新。这次我需要查找 isDefault 设置为 true 的节点并修改它。

希望这是有道理的!!

感谢您的帮助

**** 更新以显示数据库结构

{
  "addr_01" : {
    "address1" : "63 Park Ave",
    "address2" : "Unit #2",
    "city" : "Greenland",
    "firstName" : "John",
    "id" : "addr_01",
    "isDefault" : true,
    "lastName" : "Smith",
    "state" : "MA",
    "zipcode" : "01890"
  },
  "addr_02" : {
    "address1" : "101 Lafayette Rd",
    "address2" : "",
    "city" : "Rye",
    "firstName" : "Say It In 3D",
    "id" : "addr_02",
    "isDefault" : false,
    "lastName" : "",
    "state" : "NH",
    "zipcode" : "03870"
  }
}

最佳答案

来自官方文档here

you can update a child without rewriting the entire object. If you want to allow users to update their profiles you could update the username as follows:

self.ref.child("users/(user.uid)/username").setValue(username)

现在在您的案例中使用上面的示例:

我们可以做这样的事情:(我还没有尝试过,但我想你能明白)

let ref = Router.addrShip.reference().child(self.userId)
let query = ref.queryOrdered(byChild: "isDefault").queryEqual(toValue: true)

//query.child("isDefault").setValue(false)

//Updated Code

query.observeSingleEvent(of: .childAdded) { (snapshot) in
          let newRef = snapshot.ref.child("isDefault")
          newRef.setValue(false, withCompletionBlock: { (err, ref) in
                   print("SetValue")
          })
} 

请注意,来自官方文档here

setValue方法的函数签名如下:

func setValue(_ value: Any?)    

如上所示,它接受任何类型值的可选值,这意味着您可以为有效的 json 传递任何值。

另请注意,还有一个带有完成 block 的方法

func setValue(_ value: Any?, withCompletionBlock block: @escaping (Error?, DatabaseReference) -> Void)

关于json - 触发查询以返回单个子项并更新值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48030644/

相关文章:

swift - Swift 中排序数组的类型

ios - 在 UITableView cellForRowAtIndexPath 方法中访问 NSLayoutConstraint ?

firebase - NativeExpressAdView - 无法加载广告 : 0

json - 蒙哥错误: key $ must not start with '$' when store JSON object generated by xml2js module

javascript - 如何使用变量值将 List<object> 序列化为 JSON?

ios - View 的宽度和高度在定向后不会改变

android - Firebase 实时数据库 getvalue() 未映射对象

c# - 将 SQLGeography 多边形重新格式化为 JSON

javascript - 我可以从 jquery 中的变量调用 ID 元素 HTML

java - 通过 Microsoft 进行 Firebase 身份验证 - 登录选项卡未显示