我的编程空间,编程开发者的网络收藏夹
学习永远不晚

教你如何用 MongoDB 实现评论榜功能

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

教你如何用 MongoDB 实现评论榜功能

Mongodb很适合做这件事,api的调用仅仅是使用到了入门级别的CRUD,理清楚了思路,编码也会顺风顺水,所以你会发现我在这篇博客中说的比编码还多。

评论榜预期的功能

就像是StackOverFlow的那样, 用户可以发出自己的提问,其他用户来解答, 同时楼主可以回复别人的评论,别人依然可以回复楼主

数据结构

mongodb可以存储文档啊, 其实我们要做的就是构建一个合适的类,评论帮也就成功一大半了

问题/ 评论 实体如下

问题

public class Problem implements Serializable {
@Id
private String _id;// key
private String nickname; // 用户名
private String avator; // 用户头像
private String userId; // 户名id
private String title ; // 标题
private String content ;  // 内容
private boolean answered ; // 是否已经回答
private Date createTime ; // 创建时间
private boolean flag =false; // 标记是否是本人,默认是非本人
private List<Answer> answerList; // 问题的回答列表
}

评论

public class Answer {
    private String id;// 当前回答的唯一标识
    private String nickname; // 用户名
    private String avator; // 用户头像
    private  Integer userId; // 回答的用户的id
    private  String Content ; // 回答的内容
    private  Date time;
    private  boolean flag = false;// 默认false.不是本人
    private  Integer group; // 分组的标记
}

思路

Answer实体中,并没有添加一个集合用来存放Answer类型的实体,如果添加上这个集合的话,确实想法还不错,回复中有其他人对自己的回复,天生的树形结构,但是考虑到前端的渲染的难度加大,放弃了这种方案

问题的实体类中维护了一个回答的实体类的集合,所有针对楼主问题的回答实例全部放在这个集合中, 也包括楼主对问题回答者的回复, 还包含回答者对问题的回复

于是这样就仅仅存在两层,一个问题中维护着对这个问题的全部回复,前端渲染的难度大大降低,但是后来却来事了 
用户查询一个问题的详情时,后端如何处理

当用户查询一个问题的详情时,后端拿着问题的id,去数据库中将问题的实例取出来,紧接着处理Answer集合,将按照时间排序的集合按照我们指定的方式分组,再按时间排序

按什么分组呢?

当时是按照不同的用户分组, 同一个用户的全部评论,已经楼主对它的回复,以及别人对它的回复都放在一起, 所以需要一个字段,group(我选的用户id), 专门存储分组的标志. 组内的实例再按照时间排序,这样整体的层次就划分好了

public JsonResult problemDetail(@PathVariable String problemId){
    Optional<Problem> byId = problemRepository.findById(problemId);
    if (!byId.isPresent()){
        return JsonResult.fail("您没有获取到详情页,请联系管理员");
    }
    Problem problem = byId.get();
    if (problem.getAnswerList().size()>0){
            Map<Integer, List<Answer>> collect = problem.getAnswerList()
            .stream().collect(Collectors.groupingBy(Answer::getGroup));
            ArrayList<Answer> list = new ArrayList<>();
            collect.forEach((k,v)->{
                list.addAll(v);
            });
            problem.setAnswerList(list);
        }
    return JsonResult.ok("返回详情页"+problem);
}

定位出当前用户的评论

如果前端想在页面的分左右两部分展示自己的评论和别人的评论,就需要一个标记,既然上面都已经在遍历了,多加一个判断也无妨, 拿着前端提交过来的用户id和Answer中的userId比对, 如果相等,就把这个评论的flag标记为true, 前端根据这个标记区分, 从而给用户更多的权限,比如删除自己的评论

局限性

如果没个问题都像网易音乐那种,上万条评论,这样的话,估计就废了,虽然使用stream会快,但是也扛不住量啊, 但是数量小的话,还是可以接受的, 其实理想的状态是评论可以以分页的形式获取出来, 感觉才正宗。

郑州不孕不育医院:http://yyk.39.net/zz3/zonghe/1d427.html


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

教你如何用 MongoDB 实现评论榜功能

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何用vuejs实现评论功能

这篇文章主要介绍“如何用vuejs实现评论功能”,在日常操作中,相信很多人在如何用vuejs实现评论功能问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何用vuejs实现评论功能”的疑惑有所帮助!接下来,请跟
2023-06-25

Vue如何实现发表评论功能

这篇文章主要为大家展示了“Vue如何实现发表评论功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Vue如何实现发表评论功能”这篇文章吧。具体内容如下1、这是我在学习中的实例,有些的不足的地方,
2023-06-25

手把手教你使用redis实现排行榜功能

目录一、需求背景二、实现思路 1、利用数据库2、利用Redis总结一、需求背景最近项目需要做排行榜功能,实现员工邀请用户注册排行榜,要求是实时更新,查询要快。员工所属支行、二级行、省行,界面要根据条件显示排名数据。效果如下图所示:原型图
2023-04-14

买菜系统中如何实现用户评价与评论功能?

随着互联网技术的不断发展,买菜系统在生鲜行业中的应用越来越广泛,为顾客提供便捷、安全、高效的购物渠道。然而,在面对越来越多的买菜系统时,顾客如何选择符合自己需求的平台成为了一个问题。此时评价系统就变得尤为重要。评价系统作为买菜系统的一部分,
买菜系统中如何实现用户评价与评论功能?
2023-11-01

SpringBoot如何实现无限级评论回复功能

本篇内容介绍了“SpringBoot如何实现无限级评论回复功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 数据库表结构设计表结构:CR
2023-07-05

Python Django使用forms来实现评论功能

貌似Django从版本1.6开始就放弃了对自带的comments的使用,具体原因未查,但是现在使用Django的内部的模块也可以实现评论功能,那就是借助于forms模块,下面是我的一个小例子。 环境准备操作系统 : windows 7 64
2022-06-04

怎么使用ThinkPHP来实现评论功能

本篇内容介绍了“怎么使用ThinkPHP来实现评论功能”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是ThinkPHP首先,让我们了解一
2023-07-05

JavaScript如何实现答题评分功能

这篇“JavaScript如何实现答题评分功能”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“JavaScript如何实现答题
2023-07-06

怎么使用Java递归实现评论多级回复功能

这篇文章主要介绍“怎么使用Java递归实现评论多级回复功能”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么使用Java递归实现评论多级回复功能”文章能帮助大家解决问题。评论实体数据库存储字段: i
2023-07-02

编程热搜

目录