meiner Datenbank sieht wie folgt aus:Firebase - Wie einzelne Daten von einem Knoten zu entfernen, ohne gesamten Knoten entfernen
MYAPP
|_______________users
| |__OshwYF72Jhd9bUw56W7d
| | |
| | |__username
| | |__email
| | |__blocklist
| | |
| | |__I7Dbys9uHwbd3s4DFXo
| | | |__blockedId:"KbHy4293dYgVtT9pdoW"
| | |
| | |__J7c3en8rdILxJQSA9ij
| | | |__blockedId:"Gicuwy8r23ndoijdakr"
| | |
| | |__JicbS32uf6sg28dJD2a
| | |__GidhwgcLNA8jshda2f4
| |
| |__KbHy4293dYgVtT9pdoW
| |__PS8tgw53SnO892Jhweh
| |__Gicuwy8r23ndoijdakr
|
|__conversations
Ich versuche, die richtige Firebase Abfrage, um herauszufinden, einen einzelnen Knoten innerhalb blocklist
zu entfernen, ohne das Löschen die anderen Knoten.
Zum Beispiel möchte ich den Knoten löschen, die blockedId:"KbHy4293dYgVtT9pdoW"
gleich aber halten die anderen innerhalb "users/"+globaluid+"/blocklist"
enthaltenen Knoten
Dies ist der Code, den ich zur Zeit bin mit:
function unblockUser(){
// friendToUnblock is the ID I want to remove from the block list:
var friendToUnblock = document.getElementById('hiddenUid').innerHTML;
// globaluid is the currently logged in user's ID:
var blockedRef = firebase.database().ref('users/'+globaluid+'/blocklist/');
var blockedQuery = blockedRef.orderByChild('blockedId').equalTo(friendToUnblock);
blockedQuery.once('value').then(function(blockedSnapshot) {
blockedSnapshot.ref.remove(function (error) {
if (!error) {
console.log(friendToUnblock+" should now be unblocked.");
}else{
console.log("There's been an error unblocking the user: "+error);
}
});
});
};
Ich dachte, diese Funktion würde Zielen Sie nur auf den Knoten, der die übereinstimmende ID enthält, und entfernen Sie ihn, aber stattdessen wird jeder Knoten entfernt (und der Knoten blocklist
wird dabei gelöscht).
Gibt es eine Möglichkeit, nur den einzelnen Wert innerhalb des Knotens blocklist
zu targetieren und zu entfernen, ohne alle enthaltenen Komponenten zu entfernen?
Das ist perfekt, vielen Dank für Erklärung und Antwort wieder Frank! – Emily
Um an Puf's Antwort anzufügen: Da es scheint, dass die tatsächlichen Schlüssel in der Blockliste wahrscheinlich überflüssig sind, könnten Sie sie einfach durch die blockierten IDs eingeben und den Wert auf etwas anderes setzen (z.B. 'true'). Sie können sie immer noch iterieren, sie funktionieren besser in Sicherheitsregeln und Sie können sie direkt mit 'firebase.database() löschen. Ref ('users /' + globaluid + '/ blocklist'). Child (idToRemove) .remove(); ' – Kato