如何查询Firestore多集合数据并将指定部门商品展示到RecyclerView
实现方案
该需求可以正常实现,你当前定义的promoOneRef指向两个子集合的父文档tops/promotions,配置是正确的,可按以下步骤完成查询:
- 先确认两个子集合内代表部门的字段名,以及你要筛选的目标部门值,下文示例假设字段名为
department,你可替换为实际业务中的字段和目标值。 - 分别构造两个子集合的条件查询,再合并结果后传入RecyclerView即可,示例代码如下:
// 构造两个子集合的部门筛选查询 val blueBottleQuery = promoOneRef.collection("blue_bottle") .whereEqualTo("department", 你指定的目标部门值) val topsNationalQuery = promoOneRef.collection("tops_national") .whereEqualTo("department", 你指定的目标部门值) // 批量等待两个查询返回后合并结果 Tasks.whenAllSuccess<QuerySnapshot>(blueBottleQuery.get(), topsNationalQuery.get()) .addOnSuccessListener { resultSnapshots -> val productList = mutableListOf<你定义的商品实体类>() // 遍历所有返回结果,组装统一的商品列表 resultSnapshots.forEach { snapshot -> snapshot.documents.forEach { doc -> doc.toObject(你定义的商品实体类::class.java)?.let { productList.add(it) } } } // 将合并后的列表传给RecyclerView的Adapter刷新UI yourAdapter.updateList(productList) } .addOnFailureListener { // 自行处理查询失败逻辑 }
如果后续你会新增更多同层级的促销子集合,可改用集合组查询减少重复代码,只要给所有子集合下的商品文档新增一个标识父路径的字段,即可一次查询所有符合条件的子集合数据。
内容的提问来源于stack exchange,提问作者Carel Kat
相关产品推荐
相关产品推荐

