Значение удаления Firebase не работает должным образом - PullRequest
0 голосов
/ 08 мая 2018

Я хочу удалить сообщение текущего пользователя или текущий uid. UID пользователя, который разместил, указывается в JSON с помощью String: uid. Поэтому я ищу UID в снимке, и, если он существует, я удаляю родителя этого UID. Проблема в том, что все сообщения удаляются, а не только те, в которых хранится текущий uid.

Дерево JSON

Posts
    -LBzjsl0Yfwdyh9xg6D2 (this is random uid)

           photoUrl: "https://firebasestorage.googleapis.com/v0/b/blo..."

           uid: "BBPHwd0RRibXFCvHcXA2aKbHoTm1" (this is uid of the current user)

Код:

let user = Auth.auth().currentUser?.uid

databaseRef.child("Posts").queryOrdered(byChild: "uid").queryEqual(toValue: user).observeSingleEvent(of: .value, with: { (snapshot) in


            if snapshot.exists() {


            //find out parent of current post
                let parent = snapshot.ref.parent!.key
                let ref = Database.database().reference()
                print (parent)
                func remove(child: String) {
                    ref.removeValue { error, _ in

                    }
                }
                remove(child: parent)

1 Ответ

0 голосов
/ 08 мая 2018

Когда вы выполняете запрос к базе данных Firebase, потенциально может быть несколько результатов. Таким образом, снимок содержит список этих результатов. Даже если есть только один результат, снимок будет содержать список из одного результата.

Итак, ваша переменная snapshot содержит список результатов. Родителем этого списка является узел Posts. Поэтому, если вы удалите родительский элемент, все узлы будут удалены.

Чтобы удалить только узлы, соответствующие вашему запросу, вам нужно перебрать дочерние узлы snapshot и удалить их:

databaseRef.child("Posts").queryOrdered(byChild: "uid").queryEqual(toValue: user).observeSingleEvent(of: .value, with: { (snapshot) in
  for child in (snapshot?.children)! {           
    (child as AnyObject).ref.removeValue()  { error, _ in
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...