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

如何为向用户1展示不含其评论的帖子的需求正确构建数据模型?

数据模型改造方案

核心思路是把「用户未评论」的反向过滤条件转换为可正向匹配的字段,全程不需要使用not-in操作符。

方案1:用户侧新增评论过的帖子索引(适合先查用户再拉帖子的场景)

直接在用户实体下加commented_posts字段,存该用户所有评论过的帖子ID集合,示例结构如下:

{
  user: {
    user1: {
      // 原有用户字段保留
      commented_posts: ["post1"]
    },
    user2: {
      // 原有用户字段保留
      commented_posts: []
    }
  }
}

查询逻辑:

  • 先拉取当前登录用户(此处为user1)的commented_posts列表,拿到他已经评论过的所有帖子ID
  • 拉取全量帖子ID列表,在应用层做差集得到未评论的帖子ID,再批量查询这些帖子的详情即可。

方案2:帖子侧新增评论用户标记(适合直接过滤帖子列表的场景)

在每个帖子实体下加has_comment_from字段,用键值对存储所有在该帖子下发过评论的用户ID,值固定为true方便查询,示例结构如下:

{
  post: {
    post1: {
      title: 'hi',
      text: 'Good post',
      comment: {
        user1: {
          msg: "my comment"
        }
      },
      // 新增字段:存储所有评论过该帖子的用户ID
      has_comment_from: {
        "user1": true
      }
    },
    post2: {
      title: 'hi 2',
      text: 'Good post 2',
      has_comment_from: {}
    },
    post3: {
      title: 'hi 3',
      text: 'Good post 3',
      has_comment_from: {}
    }
  }
}

查询逻辑:直接在数据库层查询所有has_comment_from.user1不存在/不等于true的帖子即可,这个是普通的字段存在性/等值校验,不属于not-in操作符,符合需求。

选型建议

  • 单用户查询场景多、用户量不大选方案1,数据库侧无复杂查询,性能更高
  • 帖子列表页直接过滤的需求多选方案2,不需要应用层二次计算,开发更简单

内容的提问来源于stack exchange,提问作者Менеджер Типографии

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:12:03