我想获取集合中的所有文档以及相应的文档路径。我可以使用类似的方法来获取所有文档路径:
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(集合中文档的数量)读取才能读取这些文档,这比一次读取将它们作为集合读取要花费更多。
答案 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()
以获得整个文档内容的地图。