作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 .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/
我是一名优秀的程序员,十分优秀!