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

谈谈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.以此类推即可完成显示。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值