评论系统的几个需求
- 玩家能够对用户的文章或者游戏进行评论。
- 评论列表以主评论加回复的形式呈现,形式和微博一样。
- 评论列表可以按时间和点赞数排序。
- 每个评论附带3条点赞数最高的回复,展开评论回复的时候,则以创建时间正序排列。
最终效果

数据结构设计
一: 回复也是评论的一种,可以将他们统一成一种数据结构,
因为评论多种类型的实例,在数据库中记录topic
和topic_type
, 利用Mongoose schema virtual
特性能够获得评论主题的实例。
数据结构如下
// CommentSchema
topic: string; // 评论主题的_id
topic_type: string; // 评论主题的SchemaName
from_uid: string; // 评论者的_id
to_uid: string; // 对谁回复,表明这是一条回复,而不是评论
content: string; // 评论内容
created_at: Date; // 评论创建时间
liked_count: number; // 点赞数
comment_id: string; // 回复的评论的_id, 表明这是一条回复,而不是评论
reply_id: string; // 回复某条回复的_id,这是对某条回复的回复
将评论和回复分成两种数据结构
我们也可以把主评论和回复分成两张表,这样可以减少单个表的大小,只查看回复的时候,只对回复表进行查询即可,结构上也比较清晰,避免第一种数据结构需要循环大数组的情况。
// CommentSchema
topic: string;
topic_type: string;
from_uid: string;
content: string;
liked_count: number;
created_at: Date;
// ReplySchema
comment_id: string;
reply_id: string; // 代表是对某条回复的回复
from_uid: string; // 回复者
to_uid: string; // 对谁回复
content: string;
liked_count: number;
created_at: Date;