Когда вы выполняете запрос к базе данных 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);
});