资讯专栏INFORMATION COLUMN

mongodb如何设计评论表的表结构

cjie / 1643人阅读

摘要:谈谈如何设计评论表的表结构前言打算使用打造一个博客的后台,遇到了如何设计评论表的困惑,因为如果采用开放评论的模式,就会导致评论的层层嵌套,使得管理和展示都变得非常复杂。

谈谈mongodb如何设计评论表的表结构

前言
打算使用node+koa+mongodb打造一个博客的后台,遇到了如何设计评论表的困惑,因为如果采用开放评论的模式,就会导致评论的层层嵌套,使得管理和展示都变得非常复杂。通过各方探索和思考,我发现了一个非常不错的设计方法,在此分享给大家,希望可以对同样困惑的人给与帮助。

说明
1.我在设计的时候不考虑评论的评论的评论这种操作,我也是借鉴了sf这个网站的设计,因为如果考虑到这层操作,这个表结构的设计就会变的相当复杂,毕竟不是群聊,而且该评论下的动态会推送给所有人,你们如果想要交流可以直接在最大的评论下评论,或者发私信,所以没必要考虑到这一层。
2.这种设计是我个人的想法,初生牛犊,难免会有不成熟的地方,希望有不足的地方可以评论或者发私信告知我改正,方便我们学习成长。


评论表的表结构:

{
    "_id" : ObjectId("597aa23add840cd4ce0681d1"),
    "comment_blog_id" : "blog id",
    "comment_user_id" : "A",
    "comment_content" : "A的评论",
    "create_time" : "2017-15-12 14:00",
    "comment_responses" : [ 
        {
            "response_user_id" : "B",
            "response_user_phone" : "B的phone",
            "response_user_nickname" : "B的nickname",
            "response_content" : [ 
                "这是B给A的评论(带着索引index)", 
                "这是B给A的评论(带着索引index)", 
                "这是B给A的评论(带着索引index)"
            ],
            "create_time" : "2017-15-12 14:00",
            "get_reply" : [ 
                "这是A给B的某一个评论的回复如果有就对应插入index对应的元素没有就是空串", 
                "A没有回复B这一条就是空串", 
                "A个神经病跳着回复了这一条评论,这数组的第三个元素就是A回复的内容"
            ]
        }, 
        {
            "response_user_id" : "C",
            "response_user_phone" : "C的phone",
            "response_user_nickname" : "C的nickname",
            "response_content" : [ 
                "这是C给A的评论(带着索引index)", 
                "这是C给A的评论(带着索引index)", 
                "这是C给A的评论(带着索引index)"
            ],
            "create_time" : "2017-15-12 14:00",
            "get_reply" : [ 
                "这是A给C的第index个评论的回复", 
                "A没有回复C这一条就是空串", 
                "A个神经病跳着回复了这一条评论,这数组的第三个元素就是A回复的内容"
            ]
        }
    ]
}

插入与展示的方法
1.A在B的第index条评论下回复了B,那么对应的内容就存放在get_reply[index]里面。
2.展示的时候先遍历显示A的评论
3.然后遍历A里面的comment_responses数组。
4.接着遍历comment_responses数组中的元素的response_content数组
5.以第一条为例,遍历response_content数组显示B给A的评论,然后检查get_reply数组中的对应索引的元素是不是空,空代表没有回复,不显示,非空则跟着这条评论显示回复。
6.以此类推即可完成显示。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/19043.html

相关文章

  • Redux进阶系列2: 如何合理地设计Redux的State

    摘要:设计一个好的并非易事,本文先从设计时最容易犯的两个错误开始介绍,然后引出如何合理地设计。错误以为设计的依据以为设计的依据,往往是一个对应一个子,的结构同返回的数据结构保持一致或接近一致。至此,的结构设计完成。 Redux是一个非常流行的状态管理解决方案,Redux应用执行过程中的任何一个时刻,都是一个状态的反映。可以说,State 驱动了Redux逻辑的运转。设计一个好的State并非...

    刘明 评论0 收藏0
  • 数据库收集 - 收藏集 - 掘金

    摘要:前言在使用加载数据数据库常见的优化操作后端掘金一索引将放第一位,不用说,这种优化方式我们一直都在悄悄使用,那便是主键索引。 Redis 内存压缩实战 - 后端 - 掘金在讨论Redis内存压缩的时候,我们需要了解一下几个Redis的相关知识。 压缩列表 ziplist Redis的ziplist是用一段连续的内存来存储列表数据的一个数据结构,它的结构示例如下图 zlbytes: 记录整...

    Little_XM 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<