How to delete from Firebase database

2020-06-16 05:01发布

问题:

Hi i have followed this tutorial: https://www.youtube.com/watch?v=XIQsQ2injLo

This explains how to save and retrieve from the database, but not how to delete. I am wondering how to delete the database node that belongs to the cell that is being deleted. Thanks

回答1:

Edit. Code updated for Swift 3 and Swift 4.

I'm always using the remove with completion handler:

static let ref = Database.database().reference()

static func remove(child: String) {

    let ref = self.ref.child(child)

    ref.removeValue { error, _ in

        print(error)
    }
}

So for example if I want to delete the following value:

I call my function: remove(child: "mixcloudLinks")

If I want to go deeper and delete for example "added":

I need to change the function a little bit.

static func remove(parentA: String, parentB: String, child: String) {

    self.ref.child("mixcloudLinks").child(parentA).child(parentB).child(child)

    ref.removeValue { error, _ in

        print(error)   
    }
}

Called like:

let parentA = "DDD30E1E-8478-AA4E-FF79-1A2371B70700"
let parentB = "-KSCRJGNPZrTYpjpZIRC"
let child = "added"
remove(parentA: parentA, parentB: parentB, child: child)

This would delete just the key/value "added"

EDIT

In case of autoID, you need to save the autoID into your Dictionary to be able to use it later.

This is for example one of my functions:

func store(item: MyClassObject) {

    var item = item.toJson()

    let ref = self.ref.child("MyParentFolder").childByAutoId()
    item["uuid"] = ref.key // here I'm saving the autoID key into the dictionary to be able to delete this item later
    ref.setValue(item) { error, _ in

        if let error = error {

           print(error)
        }
    }
}

Because then I'm having the autoID as part of my dictionary and am able to delete it later:

Then I can use it like .child(MyClassObject.uuid).remove... which is then the automatic generated id.



回答2:

we can store the randomly generated id as the user id in the database and retrieve that to delete

for e.g. :

let key = ref?.childByAutoId().key
let post = ["uid": key,
                "name": myName,
                "task": myTask]

    ref?.child(key!).setValue(post)

in order to delete setvalue of the id as nil for e.g. :

 var key = [string]()
ref?.child(key[indexPath.row]).setValue(nil)
    key.remove(at: indexPath.row)
    myArray.remove(at: indexPath.row)
    myTable.reloadData()