Javascript 从Firebase实时数据库中删除数据将删除父节点中的所有数据
我正在使用Firebase并编写代码从实时数据库中删除数据。 我试图做的是在单击按钮时从用户的书签部分删除保存的帖子,下面是代码的关键部分:Javascript 从Firebase实时数据库中删除数据将删除父节点中的所有数据,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我正在使用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 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.ref.remove();
});
代码将清除用户以前保存的所有帖子,而不是删除关于特定帖子的信息。(即,这将清除“saved/user.uid/posts/”目录中的所有数据
我做错了什么?对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);
});
非常感谢!我应用了第一个代码,它工作得非常好。:)