моя база данных выглядит следующим образом:Firebase - Как удалить отдельные данные из узла без удаления всего узла
MYAPP
|_______________users
| |__OshwYF72Jhd9bUw56W7d
| | |
| | |__username
| | |__email
| | |__blocklist
| | |
| | |__I7Dbys9uHwbd3s4DFXo
| | | |__blockedId:"KbHy4293dYgVtT9pdoW"
| | |
| | |__J7c3en8rdILxJQSA9ij
| | | |__blockedId:"Gicuwy8r23ndoijdakr"
| | |
| | |__JicbS32uf6sg28dJD2a
| | |__GidhwgcLNA8jshda2f4
| |
| |__KbHy4293dYgVtT9pdoW
| |__PS8tgw53SnO892Jhweh
| |__Gicuwy8r23ndoijdakr
|
|__conversations
Я пытаюсь выяснить правильный Firebase запрос, чтобы удалить отдельный узел внутри blocklist
без удаления другие узлы.
Например, я хочу, чтобы удалить узел, который приравнивает blockedId:"KbHy4293dYgVtT9pdoW"
, но сохранить другие узлы, содержащиеся внутри "users/"+globaluid+"/blocklist"
Это код, который я сейчас использую:
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);
}
});
});
};
Я думал, что эта функция будет предназначенный только для узла, который содержит соответствующий идентификатор, и удаляет его, но вместо этого он удаляет каждый узел (и таким образом удаляет узел blocklist
в процессе).
Есть ли способ нацеливать и удалять только индивидуальное значение, содержащееся внутри узла blocklist
, без удаления всего содержащегося там?
Это идеальный вариант, спасибо за объяснения и ответить еще раз Фрэнк! – Emily
Чтобы добавить к ответу Пуфа: поскольку кажется, что фактические ключи в списке блокировок, вероятно, являются излишними, вы можете просто называть их заблокированными идентификаторами и поместить значение на что-нибудь еще (например, 'true'). Вы все еще можете их перебирать, они работают лучше в правилах безопасности, и вы можете удалить их напрямую, используя 'firebase.database(). Ref ('users /' + globaluid + '/ blocklist'). Child (idToRemove) .remove(); ' – Kato