从Firestore中删除没有集合名称的文档

时间:2020-07-22 07:43:45

标签: java android firebase google-cloud-firestore

我有一个Android应用,用户可以在其中将pdf存储在文件夹中。我正在使用Firebase Storage来存储PDF,使用Firestore来存储URL及其名称。我在删除Firestore数据时遇到问题。 目前,这是我的数据结构:

FolderName
    |
    |---PDFname--URL
               --Name

基本上,FolderName是集合。所以我有多个收藏。每个集合/文件夹中都有多个PDF。特定文件夹的多个PDF详细信息存储为文档。每个文档都有字段:URL,名称。

现在,我希望用户能够删除特定文件夹的特定PDF。单击文件夹后,他可以看到所有的PDF。他长按PDF将其删除。但是现在我不知道它所属的集合/文件夹。如果我知道文档的uid但不知道其集合,是否可以删除该文档?

还是有更好的方法来组织数据?

编辑:这是我的Firestore数据的屏幕截图-

enter image description here

1,2,3,4等是文件夹。文件夹3包含我要删除的PDF。此文件夹/收藏夹可能包含多个PDF。

2 个答案:

答案 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的组织方式不像计算机文件系统。集合与文件夹完全不同。它们只是文档的容器,您应该设计数据,以便可以查询使用集合来查找文档。