You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firestore获取已关注用户动态:问题与解决方案

问题描述

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

现有数据结构

users集合结构
confessions集合结构

解决方案分享

我已经解决了这个问题,分享出来供遇到同类问题的开发者参考:

核心思路是使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:30:30