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

Flutter Firestore实现仅查看已关注用户帖子的方案咨询

实现用户仅查看已关注用户帖子的方案

根据你的集合结构,下面分两种主流数据库场景给出具体实现方式:

一、MongoDB(文档型数据库)实现

分步查询方式

  1. 先获取当前用户的关注列表:
    从user集合中查询当前用户的文档,提取出follower数组(即该用户关注的所有用户UID):
    const currentUser = db.user.findOne({ uid: "当前用户的UID" }, { follower: 1, _id: 0 });
    const followedUids = currentUser.follower;
    
  2. 查询关注用户的帖子:
    用$in操作符匹配post集合中发帖用户UID在关注列表内的文档:
    db.post.find({ uid: { $in: followedUids } });
    

聚合查询一步到位

如果想减少数据库请求次数,可以用聚合管道关联两个集合直接查询:

db.post.aggregate([
  // 关联user集合,匹配发帖用户的信息
  {
    $lookup: {
      from: "user",
      localField: "uid",
      foreignField: "uid",
      as: "post_author"
    }
  },
  // 筛选出当前用户关注的作者的帖子
  {
    $match: {
      "post_author.uid": { $in: ["当前用户的UID对应的关注列表"] }
    }
  },
  // 只返回需要的帖子字段
  {
    $project: {
      _id: 1,
      uid: 1,
      // 这里添加你需要展示的其他帖子字段,比如内容、发布时间等
    }
  }
])

二、关系型数据库(以MySQL为例)实现

注意:关系型数据库通常不推荐用数组存储follower,更规范的做法是用中间表维护关注关系。

规范中间表方案

  1. 先创建关注关系中间表user_follow:
CREATE TABLE user_follow (
  uid INT NOT NULL COMMENT '关注者ID',
  followed_uid INT NOT NULL COMMENT '被关注者ID',
  PRIMARY KEY (uid, followed_uid),
  FOREIGN KEY (uid) REFERENCES user(uid),
  FOREIGN KEY (followed_uid) REFERENCES user(uid)
);
  1. 查询当前用户关注的帖子:
    通过关联post表和user_follow表,筛选出符合条件的帖子:
SELECT p.* 
FROM post p
INNER JOIN user_follow uf ON p.uid = uf.followed_uid
WHERE uf.uid = 123; -- 123替换为当前用户的UID

直接存储数组的兼容方案(不推荐)

如果你的user表确实用JSON类型存储follower数组,可以用JSON函数查询:

SELECT p.*
FROM post p
INNER JOIN user u ON JSON_CONTAINS(u.follower, CAST(p.uid AS JSON))
WHERE u.uid = 123; -- 123替换为当前用户的UID

性能优化建议

  • MongoDB:给post.uid和user.uid字段创建单字段索引,提升查询速度;
  • MySQL:给user_follow(uid, followed_uid)创建联合索引,给post.uid创建单字段索引。

内容的提问来源于stack exchange,提问作者fatih yılmaz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:38:18