我正在使用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();
});
代码不会删除有关特定帖子的信息,而是会清除用户先前保存的所有帖子。 (即,这将清除“ saved / user.uid / posts /”目录中的所有数据。
我在做什么错了?
答案 0 :(得分:0)
对Firebase数据库执行查询时,可能会有多个结果。因此,快照包含这些结果的列表。即使只有一个结果,快照也会包含一个结果的列表。
因此snapshot
变量包含结果列表。 snapshot.ref
指的是您运行查询的位置。因此,当您执行snapshot.ref.delete()
时,您将删除运行查询的整个位置,而不仅仅是结果。
要删除结果,请遍历快照的子项,然后一一删除:
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();
});
});
您还可以在循环后通过多位置更新一次性删除它们:
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);
});