Kotlin Firestore如何获取集合内包含子集合的所有文档ID
问题原因
你当前的代码无法返回permisos文档ID,是因为Firestore中仅包含子集合、无任何显式存储字段的文档属于虚拟占位文档,这类文档本身没有实际存储的文档数据,默认的集合get()查询只会返回有实际字段数据的文档,因此不会将这类占位文档纳入查询结果。你现有代码的逻辑本身没有问题,只是受限于Firestore的默认查询规则。
解决方案
方案1:移动端/客户端场景(推荐,改动最小)
给所有仅含子集合的文档添加任意一个占位字段即可,比如新增is_container: true的布尔字段,哪怕字段值为空字符串都可以,只要文档有实际存储的内容,就能被正常查询到。
添加占位字段后,你现有的代码不需要做任何修改,就能返回全部3个文档的ID。
方案2:服务端场景(无需修改数据库数据)
如果是在服务端环境运行,可以直接使用Firebase Admin SDK提供的listDocuments()方法,该方法会返回指定集合下的所有文档,包括无字段的虚拟占位文档,Kotlin服务端示例代码如下:
val ubicacionRef = db.collection("UbicacionTP") val docRefs = ubicacionRef.listDocuments() val docIds = docRefs.map { it.id } println(docIds)
注意:客户端SDK出于安全和性能限制,未提供
listDocuments()接口,因此该方案仅适用于服务端环境。
内容的提问来源于stack exchange,提问作者Rolando Rodriguez
相关产品推荐
相关产品推荐

