我需要在Cloud Firestore中获取集合的所有ID /键。目前,我这样做(常规):
ApiFuture<QuerySnapshot> snapshot = firestoreClient.database.collection(bucket).get()
List<QueryDocumentSnapshot> documents = snapshot.get().getDocuments()
for (QueryDocumentSnapshot document : documents) {
keys.add(document.id)
}
我在可能具有很多文档的集合上运行此函数,假设30.000导致java.lang.OutOfMemoryError: Java heap space
事实是,我不需要所有文件。从我的代码中可以看到,我所需要的只是检查集合中有哪些文档(即键/ ID的列表),但是我没有找到任何方法来获取它们而又不提取所有文档,而这是一个巨大的开销。
我使用Java Firebase Admin SDK(6.12.2)。
因此,我希望有一种方法可以在不增加开销的情况下且不使堆达到最大的情况下抓住所有密钥。
调用get()
将获得完整的文档。但是您应该可以做一个空的选择。从select()
的文档中:
公共查询选择(字符串...字段)
创建并返回一个新的
Query
实例,该实例将字段掩码应用于结果并返回指定的字段子集。您可以指定要返回的字段路径的列表,或使用空列表仅返回匹配文档的引用。
所以像这样:
firestoreClient.database.collection(bucket).select(new String[0])
另请参阅: