我有一个使用.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"
}
}
答案 0 :(得分:0)
来自官方文档here
您可以更新孩子 不重写整个对象。如果你想允许用户 更新他们的个人资料,您可以更新用户名,如下所示:
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")
})
}
现在在你的案例中使用上面的例子:
我们可以这样做:(我没有尝试过,但我认为你可以得到这个想法)
setValue
请注意官方文档here
func setValue(_ value: Any?)
方法的函数签名如下:
func setValue(_ value: Any?, withCompletionBlock block: @escaping (Error?, DatabaseReference) -> Void)
如上所示,它接受任何类型值的可选项,这意味着您可以为有效的json传递任何值。
另请注意,还有一个带完成块的方法
a=[2;3];
b=[4;5];
c=[1;1];