Удалить определенный дочерний узел в Firebase Swift - PullRequest
0 голосов
/ 07 октября 2018

Можете ли вы помочь мне решить эту проблему?Я хочу удалить конкретное сообщение в базе данных.

Моя база данных выглядит следующим образом:

• MESSAGES  
 ••(childByAutoID XXXXXXXXX)  
  •••email: user1@gmail.com  
  •••message: hello there  
  •••timestamp: 329842938592  
•  
 ••(childByAutoID XXXXXXXXX)  
  •••email: user1@gmail.com  
  •••message: where are you?  
  •••timestamp: 872985042750  
•  
 ••(childByAutoID XXXXXXXXX)  
  •••email: user2@gmail.com  
  •••message: basketball?  
  •••timestamp: 845938459349

Я пытался использовать этот код, но он удаляет неправильный пост от текущего пользователя (user1).

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {


    if (editingStyle == .delete) {
        jobRequests.remove(at: indexPath.row)
        tableView.deleteRows(at: [indexPath], with: .automatic)

        if let email = Auth.auth().currentUser?.email {

            Database.database().reference().child("MESSAGES").queryOrdered(byChild: "email").queryEqual(toValue: email).observeSingleEvent(of: .childAdded, with: { (snapshot) in

               snapshot.ref.removeValue()

таккак я могу удалить сообщение "где ты?"и его члены.

enter image description here

1 Ответ

0 голосов
/ 07 октября 2018

Запрос должен соответствовать тому, что вы хотите удалить.

Если вы хотите удалить сообщение с текстом "where are you?", вам нужно сделать запрос:

let messagesRef = Database.database().reference().child("MESSAGES")

messagesRef.queryOrdered(byChild: "message").queryEqual(toValue: "where are you?")...

Если вы хотите удалить все сообщения с определенным адресом электронной почты, вам нужно запроситьчто:

messagesRef.queryOrdered(byChild: "email").queryEqual(toValue: "email1@gmail.com")...

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

messagesRef.queryOrderedByKey().queryEqual(toValue: "-L....")...

Или более идиоматический:

messagesRef.child("-L....").observeSingleEvent(of: .value, with: { (snapshot) in
    snapshot.ref.removeValue()

(Обратите внимание, что мы наблюдаем value здесь, а не .childAdded, так как мы больше не используем запрос.

Или даже проще; поскольку вы уже знаете полный путь к удаляемому узлу,Вам не нужно ничего читать:

messagesRef.child("-L....").removeValue()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...