Удаление данных из базы данных Firebase Realtime удаляет все данные в родительском узле - PullRequest
0 голосов
/ 06 января 2020

Я использую Firebase и пишу код для удаления данных из базы данных реального времени. То, что я пытаюсь сделать, это удалить сохраненный пост из раздела закладок пользователя при нажатии кнопки, и вот ключевая часть кода:

let user=firebase.auth().currentUser;
var ref1=firebase.database().ref('saved/'+user.uid+'/posts/').orderByChild('postnum').equalTo(j); //j is the postnum of the post to be deleted
ref1.once('value',function(snapshot){
    snapshot.ref.remove();
});

Вместо удаления информации об указанном c post, код удалит все записи, которые пользователь ранее сохранил. (т. е. это приведет к удалению всех данных из каталога «сохранено / user.uid / posts /».

Что я делаю не так?

1 Ответ

0 голосов
/ 06 января 2020

Когда вы выполняете запрос к базе данных Firebase, потенциально может быть несколько результатов. Таким образом, снимок содержит список этих результатов. Даже если есть только один результат, снимок будет содержать список из одного результата.

Таким образом, переменная snapshot содержит список результатов. И snapshot.ref относится к месту, где вы запустили запрос. Поэтому, когда вы делаете snapshot.ref.delete(), вы удаляете все местоположение, где вы выполняли запрос, а не только результаты.

Чтобы удалить результаты, l oop над дочерними элементами снимка и удалите их один за другим:

let user=firebase.auth().currentUser;
var ref1=firebase.database().ref('saved/'+user.uid+'/posts/').orderByChild('postnum').equalTo(j); //j is the postnum of the post to be deleted
ref1.once('value',function(snapshot){
  snapshot.forEach(function(child) {
    child.ref.remove();
  });
});

Вы также можете удалить их за один go после l oop с обновлением нескольких местоположений:

let user=firebase.auth().currentUser;
var ref1=firebase.database().ref('saved/'+user.uid+'/posts/').orderByChild('postnum').equalTo(j); //j is the postnum of the post to be deleted
ref1.once('value',function(snapshot){
  let updates = [];
  snapshot.forEach(function(child) {
    updates[child.key] = null;
  });
  ref1.update(updates);
});

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...