haben Sie nur eine Momentaufnahme (eine Kopie) der Daten dort
den Wert aus der Datenbank Firebase zu entfernen; versuchen Sie dies:
//path should be like this (i guess):
let currentUserUid = FIRAuth.auth()!.currentUser!.uid
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.child(currentUserUid)
.removeValue()
oder gleich:
let currentUserUid = FIRAuth.auth()!.currentUser!.uid
ref.child("posts/\(postId)/peopleWhoLike/\(currentUserUid)").removeValue()
UPDATE
Sie Sie die Person Schlüssel entfernen - dann können Sie:
a) iterieren peopleWhoLike und finden Sie, ob es der Benutzer ist (aber bitte setzen Sie diese let currentUserUid = FIRAuth.auth()!.currentUser!.uid
außerhalb der Schleife!
//path should be like this (i guess):
let currentUserUid = FIRAuth.auth()!.currentUser!.uid
// loop and when match `person.value == currentUserUid` then:
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.child(person.key) //<-- change here
.removeValue()
b) Sie suchen in der Abfrage. und entferne dann den resultierenden Knoten.
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.startAt(currentUserId)
.endAt(currentUserId)
. [...] do something
ich weiß nicht, ob Sie .removeValue()
an dieser Stelle nennen lenken kann. aber mit einem SingleEvent und einem Snapshot können Sie snapshot.ref.removeValue()
- doublecheck tun, bevor Sie löschen. aber da es sich in einem Referenzergebnisse sollten Sie in der Lage direkt .removeValue()
ref.child("posts")
.child(postId)
.child("peopleWhoLike")
.startAt(currentUserId)
.endAt(currentUserId)
.removeValue()
Notiz aufzurufen: Diese Suche dauert länger als einen direkten Weg
siehe hier doc für query:
https://firebase.googleblog.com/2013/10/queries-part-1-common-sql-queries.html#byemail
https://firebase.google.com/docs/database/ios/read-and-write#delete_data
HINWEIS:
Ich würde empfehlen, sie mit dem userUid
als Schlüssel zu speichern, weil Sie nur einen Onliner benötigen, um zu löschen (siehe mein erstes codesnippet, wo Sie nicht alle Daten von peopleWhoLike
erhalten müssen) und als Wert nur 1 oder Sie können das speichern aktuelles Datum (dann wissen Sie wann es gemocht wurde)
Können Sie 'print (peopleWhoLike)' vor dem Entfernen und nach dem Entfernen kopieren und als Text kopieren? – muescha
sollten Sie nur lesen ontime at beginngn 'let currentUserUid = FIRAuth.auth() !. currentUser! .uid', um einige Aufrufe zu beschleunigen – muescha
wo die Likes entfernt werden sollten? – muescha