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();
}
}
});