我有一个Android应用,用户可以在其中将pdf存储在文件夹中。我正在使用Firebase Storage来存储PDF,使用Firestore来存储URL及其名称。我在删除Firestore数据时遇到问题。 目前,这是我的数据结构:
FolderName
|
|---PDFname--URL
--Name
基本上,FolderName是集合。所以我有多个收藏。每个集合/文件夹中都有多个PDF。特定文件夹的多个PDF详细信息存储为文档。每个文档都有字段:URL,名称。
现在,我希望用户能够删除特定文件夹的特定PDF。单击文件夹后,他可以看到所有的PDF。他长按PDF将其删除。但是现在我不知道它所属的集合/文件夹。如果我知道文档的uid但不知道其集合,是否可以删除该文档?
还是有更好的方法来组织数据?
编辑:这是我的Firestore数据的屏幕截图-
1,2,3,4等是文件夹。文件夹3包含我要删除的PDF。此文件夹/收藏夹可能包含多个PDF。
答案 0 :(得分:1)
根据有关delete operation in Cloud Firestore的官方文档,删除文档的方式如下:
FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
CollectionReference collRef = rootRef.collection("3");
DocumentReference pdfRef = collRef.document("Resources.pdf");
pdfRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Log.d("TAG", "Resources.pdf successfully deleted!");
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.w("TAG", "Error deleting document", e);
}
});
此代码将从集合Resources.pdf
中永久删除3
文档。如果您需要删除同一集合中的另一个文档,则应将上面的pdfRef
更改为:
DocumentReference pdfRef = collRef.document("AnotherResources.pdf");
如果您要从另一个集合中删除PDF,例如从2
集合中删除PDF,只需使用:
CollectionReference collRef = rootRef.collection("2");
DocumentReference pdfRef = collRef.document("ResourcesName.pdf");
答案 1 :(得分:0)
如果我知道文档的uid但不知道其集合,是否可以删除该文档?
否,不可能。您必须能够构造文档的完整路径才能删除它。
用动态数据命名集合不是一个好主意。集合的名称应为静态,并且在您的代码中始终是众所周知的,以便您可以使用它们执行查询。
请考虑将所有动态数据放入文档中,以便可以通过对静态命名集合的查询找到它们。对我来说,目前尚不清楚您应该怎么做,但是您绝对应该为自己创建一种根据可用输入查找文档的方法。这通常涉及在文档中创建可用于查询的属性。
还请注意,Firestore的组织方式不像计算机文件系统。集合与文件夹完全不同。它们只是文档的容器,您应该设计数据,以便可以查询使用集合来查找文档。