Firebase按值获取子名称并将其删除

时间:2017-07-25 15:35:12

标签: ios firebase swift3 firebase-realtime-database

我的JSON看起来像这样:

users
  username1: "WWOdh96Yr3Qs4N3GWDVq3OlQFfB2"
  username2: "RJ6PztTLmsg222oUygWHtWpVHdg1"

我想用他们的密钥获取“username1”,即(auth.uid)!如果它发现我想删除它,那么删除后它将如下所示:

    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 个答案:

答案 0 :(得分:3)

首先,我的方法是,如果我想在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")
                }
            })
        }
    })
    }

尝试在打印(快照)

之后立即添加