Firestore获取已关注用户动态:问题与解决方案
问题描述
我正在开发一款社交媒体应用,当前需要实现首页展示所有已关注用户动态的功能。具体需求是:从Firestore的users集合中,获取当前用户following集合内所有用户的confessions集合中的全部数据。我之前了解过CollectionGroup,但一开始觉得它不适用这个场景,想请教如何编写对应的查询语句,或者是否需要调整Firestore的数据结构,欢迎任何建议。
现有数据结构


解决方案分享
我已经解决了这个问题,分享出来供遇到同类问题的开发者参考:
核心思路是使用CollectionGroup——它可以从Firestore中所有同名的集合检索数据,刚好适配获取各用户confessions列表的需求。针对场景添加约束:先收集当前用户已关注的所有用户ID列表,再通过whereIn筛选出fromUserId匹配该列表的动态内容。
实现代码如下:
val followingCollection = database.collection("users").document(currentUserUid).collection("following") followingCollection.get() .addOnSuccessListener { querySnapshot -> val followedUserIds = querySnapshot.documents.map { it.id } val confessionsList = mutableListOf<Confession>() if (followedUserIds.isNotEmpty()) { val confessionsCollectionGroup = database.collectionGroup("confessions") confessionsCollectionGroup .whereIn("fromUserId", followedUserIds) .limit(limit) .orderBy("timestamp", Query.Direction.DESCENDING) .get() .addOnSuccessListener { querySnapshot -> val confessions = querySnapshot.toObjects(Confession::class.java) confessionsList.addAll(confessions.distinctBy { it.id }) ...
内容的提问来源于stack exchange,提问作者Hasan Altay
相关产品推荐
相关产品推荐

