Firebase CollectionGroup读取指定对象无结果的问题求助
Firebase CollectionGroup 查询无结果问题排查与解决
我有嵌套的CollectionGroup结构,想要从中读取一个特定对象,使用以下Firebase代码查询却未得到任何结果:
db.collectionGroup("Objekte") .whereEqualTo("timestamp",key.toString()) .get() .addOnSuccessListener { doc-> for (document : doc) { if(document != null) { Log.d("TAG", "DocumentSnapshot data: ${document.data}") } else{ Log.d("TAG", "No such document") } } }
数据库结构说明:存在多层嵌套集合,Objekte作为子集合分布在不同父文档下,目标字段timestamp以数值类型存储(日志输出的目标时间戳为:1672216119769)
问题原因与解决方法
- 类型不匹配:代码中将
key转为字符串(key.toString()),但数据库里的timestamp是长整型数值,字符串与数值无法匹配,导致查询无结果。需直接传入数值类型的key。 - 缺失CollectionGroup索引:使用
collectionGroup查询必须创建对应复合索引,需在Firebase控制台为Objekte集合的timestamp字段创建collectionGroup类型的索引。 - 遍历语法错误:原代码循环
for (document : doc)存在语法问题,正确写法应为遍历querySnapshot的文档列表。
修正后的代码
db.collectionGroup("Objekte") .whereEqualTo("timestamp", key) // 直接传入数值类型,无需转换为字符串 .get() .addOnSuccessListener { querySnapshot -> if (querySnapshot.isEmpty) { Log.d("TAG", "未找到匹配的文档") return@addOnSuccessListener } for (document : querySnapshot.getDocuments()) { Log.d("TAG", "DocumentSnapshot data: ${document.data}") } } .addOnFailureListener { exception -> Log.d("TAG", "查询失败: ", exception) }
内容的提问来源于stack exchange,提问作者Captai-N
相关产品推荐
相关产品推荐

