我想要代替硬编码值的方法当然是找到相关文档 ID 并将其放入我可以使用的值中。
要通过文档 ID (4vom6RfWU9depGXR0Zw0) 删除文档,您应该将 ID 添加为文档的属性。
Firestore-root
|
--- events (collection)
|
--- 4vom6RfWU9depGXR0Zw0 (document)
|
--- docId: "4vom6RfWU9depGXR0Zw0"
|
--- //The other properties
现在要查找该特定文档,您需要使用如下所示的查询:
val rootRef: FirebaseFirestore = FirebaseFirestore.getInstance()
val eventsRef: CollectionReference = rootRef.collection("events")
val docIdQuery: Query = eventsRef.whereEqualTo("docId", "4vom6RfWU9depGXR0Zw0")
docIdQuery.get().addOnCompleteListener(object : OnCompleteListener<QuerySnapshot?>() {
fun onComplete(task: Task<QuerySnapshot?>) {
if (task.isSuccessful()) {
for (document in task.getResult()) {
document.getReference().delete().addOnSuccessListener(object : OnSuccessListener<Void?>() {
fun onSuccess(aVoid: Void?) {
Log.d(TAG, "Document successfully deleted!")
}
}).addOnFailureListener(object : OnFailureListener() {
fun onFailure(e: Exception) {
Log.w(TAG, "Error deleting document", e)
}
})
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException()) //Don't ignore potential errors!
}
}
})
对于 Java 用户:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference eventsRef = rootRef.collection("events");
Query docIdQuery = eventsRef.whereEqualTo("docId", "4vom6RfWU9depGXR0Zw0");
docIdQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot document : task.getResult()) {
document.getReference().delete().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d(TAG, "Document successfully deleted!");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w(TAG, "Error deleting document", e);
}
});
}
} else {
Log.d(TAG, "Error getting documents: ", task.getException()); //Don't ignore potential errors!
}
}
});
但是,如果您想删除一个将 date 属性的值设置为“2020 年 11 月 25 日”的文档,则此代码将起作用。在这种情况下,应使用以下查询:
Query dateQuery = eventsRef.whereEqualTo("date", "25 Nov 2020");