前言:
打算使用node+koa+mongodb打造一個博客的後臺,遇到了如何設計評論表的困惑,由於若是採用開放評論的模式,就會致使評論的層層嵌套,使得管理和展現都變得很是複雜。經過各方探索和思考,我發現了一個很是不錯的設計方法,在此分享給你們,但願能夠對一樣困惑的人給與幫助。node
說明:
1.我在設計的時候不考慮評論的評論的評論這種操做,我也是借鑑了sf這個網站的設計,由於若是考慮到這層操做,這個表結構的設計就會變的至關複雜,畢竟不是羣聊,並且該評論下的動態會推送給全部人,大家若是想要交流能夠直接在最大的評論下評論,或者發私信,因此不必考慮到這一層。
2.這種設計是我我的的想法,初生牛犢,不免會有不成熟的地方,但願有不足的地方能夠評論或者發私信告知我改正,方便咱們學習成長。mongodb
評論表的表結構:數組
{ "_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.以此類推便可完成顯示。koa