Home > Back-end >  How can I delete a document in Firebase after sorting by a specific field?
How can I delete a document in Firebase after sorting by a specific field?

Time:03-24

I am currently working with Android Studio (with Java) and am having some trouble deleting a document. Say I am using a "Collection" with a "document" with a specific "field". I need to delete the document if the field is "apple" but I don't know the actual document name.

Currently the code that I am using (by looking at other answers) is:

db
.collection("Collection")
.whereEqualTo("field", "apple")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
    @Override
    public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
        value.delete();
    }
});

I was wondering how to delete the entire "document" based on just knowing if the field is "apple". Thank you!

CodePudding user response:

You can get list of documents from the query snapshot, then loop through the list and delete the documents. Using the given example:

db.collection("Collection")
                .whereEqualTo("field", "apple")
                .addSnapshotListener(new EventListener<QuerySnapshot>() {
                    @Override
                    public void onEvent(@Nullable QuerySnapshot value, @Nullable FirebaseFirestoreException error) {
                        if (value != null && !value.getDocuments().isEmpty()) {
                            List<DocumentSnapshot> documents = value.getDocuments();
                            for (DocumentSnapshot document : documents) {
                                DocumentReference documentReference = document.getReference();
                                documentReference.delete();
                            }
                        }
                    }
                });

When not requiring realtime updates you can use:

db.collection("Collection")
                .whereEqualTo("field", "apple")
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
                    @Override
                    public void onComplete(@NonNull Task<QuerySnapshot> task) {
                        List<DocumentSnapshot> documents = task.getResult().getDocuments();
                        for (DocumentSnapshot document : documents) {
                            DocumentReference documentReference = document.getReference();
                            documentReference.delete();
                        }
                    }
                });
  • Related