如何从Firebase实时数据库中删除数据?

57
我正在Android应用程序中使用Firebase实时数据库,数据如下所示:enter image description here 如何删除标记为“Apple”(在图片中)的记录? 根据文档,要删除项,您需要在引用上调用removeValue()。但是要获取引用,我需要子级id。因为它是随机生成的ID (-KISNx87aYigsH3ILp0D),那么如何删除它呢?

1
感谢Amit和Frank van Puffelen的提问和回答。 - Däñish Shärmà
7个回答

86

如果您不知道要删除的项的键,您需要先查询数据库来确定这些键:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
Query applesQuery = ref.child("firebase-test").orderByChild("title").equalTo("Apple");

applesQuery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot appleSnapshot: dataSnapshot.getChildren()) {
            appleSnapshot.getRef().removeValue();
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.e(TAG, "onCancelled", databaseError.toException());
    }
});

2
非常感谢。这正是我在寻找的内容。 - Amit Jayant
4
如果有多个标题为“Apple”的节点,该怎么办? - Sumit Jha
1
我认为你在写getInstance().ref()这部分时出现了意外。正确的代码应该是FirebaseDatabase.getInstance().getReference(); - Yunus Haznedar
1
好的,已修复。 - Frank van Puffelen
@FrankvanPuffelen 如果我想在这个 onDataChanged 方法中获取这个包含苹果对象的内容,我应该怎么做? - Umair
显示剩余2条评论

16

这解决了我的问题

 mPostReference = FirebaseDatabase.getInstance().getReference()
                        .child("quotes").child(mPostKey);
                mPostReference.removeValue();

7
如果您正在使用firebase-admin,您可以简单地尝试以下操作:
admin.ref(`/users/${userid}`).remove()

对我来说,那很有效。

同时,请记得使用 asyncawait 语法。


6
您可以使用以下代码:
onDeletePost(id:string){
return this.http.delete(`https://my-angular8-prjt.firebaseio.com/posts/${id}.json`).subscribe();
}

3
你应该包含回答所做的具体细节。 - clubby789

2

根据您删除数据的方式和原因,可以使用以下方法:

// Could store the push key or get it after push
String newPostKey = yourDatabase.child('firebase-test').push({
    something:something
}).key();

// Depends how you get to here
howYouGotHereId.parent().setValue(null);

Firebase 数据保存 3.0


0

假设images是您想要清除的Firebase数据库目录。

private static DatabaseReference mDatabase;
public static void clearData(){
    mDatabase = FirebaseDatabase.getInstance().getReference();
    mDatabase.child("images").setValue(null);
}

这里的 images 是数据库的父目录。如果您想要清除图像目录中内嵌的 DCIM 目录以便保留其中的剩余数据。

在这种情况下,您可以像这样操作,

mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("images").child("DCIM").setValue(null);

作为对查询的响应,请尝试使用带有空值的setValue方法setValue(null)从Firebase数据库中清除数据。

0
在使用Python进行Firebase管理时:
import firebase_admin
from firebase_admin import credentials
from firebase_admin import db
cred = credentials.Certificate("<your certificate>.json")
firebase_admin.initialize_app(cred, {'databaseURL': 'https://<your db>.firebaseio.com/'})

snapshot = db.reference('firebase-test').get()
for k,v in snapshot.items():
    if v['title'] == "Apple":
        db.reference('firebase-test').child(k).delete()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接