Firebase 按值获取子名称并将其删除
Posted
技术标签:
【中文标题】Firebase 按值获取子名称并将其删除【英文标题】:Firebase get child name by value and remove it 【发布时间】:2017-07-25 15:35:12 【问题描述】:我的 JSON 如下所示:
users
username1: "WWOdh96Yr3Qs4N3GWDVq3OlQFfB2"
username2: "RJ6PztTLmsg222oUygWHtWpVHdg1"
我想通过他们的密钥(auth.uid)获取“username1”!如果它找到我想删除它,所以删除后它会是这样的:
users
username2: "RJ6PztTLmsg222oUygWHtWpVHdg1"
.
self.ref.child("users").queryOrderedByValue().queryEqual(toValue: user?.uid).observe(.value, with: snapshot in
if snapshot.exists()
print("\(snapshot.value)")
snapshot.ref.child(snapshot.value as! String).removeValue() // this deleting every thing which is WRONG!
else
print("Not found--")
self.ref.removeAllObservers()
)
此代码删除用户中的所有内容。我只想删除特定用户。
【问题讨论】:
【参考方案1】:首先,我的方法是如果我想在 1 时刻查询 1 个值,就像你正在做的那样,我会做一个 observeSingleEvent (这是最好的方法吗?)。但是为了解决您的问题,您忘记添加“用户”路径。下面的代码使用起来更安全,因为您强制展开(不建议在这种情况下使用):
let dataRef = self.ref.child("users")
dataRef.keepSynced(true)
if let usersUID = Auth.auth().currentUser?.uid
dataRef.child("users").queryOrderedByValue().queryEqual(toValue: usersUID).observeSingleEvent(.value, with: snapshot in
print(snapshot)
let values = snapshot.value as? NSDictionary
for (key, value) in values
print(value) // does this print the uid?
print(key) // or this one?
self.ref.child("users/\(key)").removeValueWithCompletionBlock( (err, ref) in
if err != nil
print(err)
else
print(ref)
print("Removed")
)
)
尝试在打印(快照)之后添加它
【讨论】:
谢谢!但你能告诉我在这种情况下如何使用“observeSingleEvent”吗?使用完整代码编辑您的答案,我们将不胜感激并接受 @Sam 我更新了它,虽然我没有测试它应该可以工作 我很困惑,如果你能解释一下这里发生了什么,请i.gyazo.com/15dc03d6245cad3114120a680e422734.png 我已经提到了照片中发生的事情。有什么想法吗? @Sam 哎呀。一个非常常见的错误是使用observeSingleEvent 使您的数据库保持同步。我在一分钟内编辑代码 @Sam 你能检查一下打印是否正确(用户存在于数据库中)吗?如果它很好,我会进行最后一次更改以使其正常工作,因为我认为您需要再次循环数据。以上是关于Firebase 按值获取子名称并将其删除的主要内容,如果未能解决你的问题,请参考以下文章
如何在firebase(swift)中获取子节点的值,并将其显示在视图控制器的标签中