获取集合中的所有文档以及文档的路径

时间:2020-05-17 08:16:55

标签: java android firebase google-cloud-firestore

我想获取集合中的所有文档以及相应的文档路径。我可以使用类似的方法来获取所有文档路径:

firestore.collection("root_collection").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            List<String> list = new ArrayList<>();
            for (QueryDocumentSnapshot document : task.getResult()) {
                list.add(document.getPath());
            }
            Log.d(TAG, list.toString());
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});

但是,在此之后,我将必须进行n(集合中文档的数量)读取才能读取这些文档,这比一次读取将它们作为集合读取要花费更多。

2 个答案:

答案 0 :(得分:0)

但是,在此之后,我必须进行n(集合中的文档数)读取才能获取这些文档,这比一次读取将它们作为集合来获取要花费我更多的钱。

为了创建文档路径列表,请创建“ n”个请求。要实际获取所有相应文档的内容,请根据新创建的列表执行另一个“ n”请求。为什么要这么做?如果需要将文档及其路径一起获取,为什么不使用单个请求将其获取?因此,请检查以下方法:

firestore.collection("root_collection").get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
    @Override
    public void onComplete(@NonNull Task<QuerySnapshot> task) {
        if (task.isSuccessful()) {
            List<String> paths = new ArrayList<>();
            List<ModelClass> documents = new ArrayList<>();
            for (QueryDocumentSnapshot document : task.getResult()) {
                paths.add(document.getPath());
                documents.add(document.toObject(ModelClass.class));
            }

            //Do what you need to do with the lists
        } else {
            Log.d(TAG, "Error getting documents: ", task.getException());
        }
    }
});

否则,这将浪费文档读取时间。

答案 1 :(得分:0)

查询这样的集合时,实际上是在获取该集合中所有文档的全部内容。无需进行其他查询-您收到的每个QueryDocumentSnapshot中已经包含所有内容。请注意,QueryDocumentSnapshot的子类为DocumentSnapshot。您可以简单地调用其getter方法来了解文档的内容。例如,您可以调用document.getData()以获得整个文档内容的地图。