二级评论列表功能

一:需求场景

我的个人网站留言列表在开发时,因为本着先有功能的原则。留言列表只有一级,平铺的。

当涉及多人回复,或者两个人多次对话后, 留言逻辑看着非常混乱。如下图

于是,我就打算将平铺的列表,改造为二级列表。效果图如下

二:实现方案

因为我是前端开发,对数据库查询语言的认知还停留在

select * from table

我对数据库的使用,之前真真就是把它当个持久存放数据的仓库。查询语句都停留在最简单的增删改查。

于是我在考虑如何实现功能时,第一个想法又是,在原有表结构的基础上添加一个parent字段。

如果是顶级留言parent字段存放空值,二级或者三级都存放父级的id。

然后接口返回数据给前端,前端JS再把数据处理两级的结构。虽然个人网站的前后端都是我自己。但是还是感觉JS更加顺手

后来考虑到存在分页,如上方案是解决不了分页问题的。

三: 数据库查询语句

因为后端是用Node.js配合MongoDB开发的,于是去查了查用Mongodb的查询语句直接完成两级结构。

然后我打开了一个新世界的大门~~~

数据库的查询语句可比JS在哪处理数据的效率高上几个维度,如下为使用Mongodb的管道聚合的查询语句。一个语句搞定JS无数个循环,且逻辑清晰!

javascript 复制代码
DB.collection(Collection).aggregate([
    {
        $sort: {
            _id: -1
        }
    },
    {
        $lookup: { // 将评论文档与其父级文档关联
            from: Collection,
            localField: "_id",
            foreignField: "parentId",
            as: "son"
        }
    },
    {
        $match: { // 筛选出只有父级文档的评论文档,排除顶级评论档
            parentId: { $in: ["", null] }
        }
    },
    {
        $skip: data.Skip
    }, // 跳过(page-1)*page_size条文档数
    {
        $limit: data.Limit// 限制返回的文档数为page_size
    }
])
相关推荐
0思必得03 分钟前
[Web自动化] 爬虫实例(获取时光网某个年度电影数据)
前端·爬虫·python·selenium·自动化
Devlive 开源社区14 分钟前
技术日报|React视频工具Remotion三连冠日增1374星破3万,Apple Silicon语音库mlx-audio爆火登榜第二
前端·react.js·前端框架
一个天蝎座 白勺 程序猿25 分钟前
金仓数据库KingbaseES无缝替代MongoDB,实现核心业务系统平稳迁移
数据库·mongodb·架构·时序数据库·kingbasees
m0_7482299925 分钟前
Vue3高效学习路线全攻略
前端·javascript·vue.js
谢尔登37 分钟前
React架构演变
前端·react.js·架构
木辰風41 分钟前
vue在IE浏览器下父页面向子页面传输对象时数据丢失
前端·javascript·html
小雨青年1 小时前
Cursor 项目实战:AI播客策划助手(四)—— 产品发布与交付收尾
前端·人工智能
晚霞的不甘1 小时前
Flutter for OpenHarmony《淘淘购物》主页点击跳转功能详解:从 UI 响应到页面导航的完整实现
前端·flutter·ui·搜索引擎·前端框架·交互
cooldream20091 小时前
前端技术架构详解:Vue 3 + TypeScript + Vite 在具身 AI 系统中的实践
前端·架构·typescript
迟_1 小时前
CSS-实现图片靠右
前端·css