91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

教你如何用 MongoDB 實現評論榜功能

發布時間:2020-08-17 01:36:18 來源:網絡 閱讀:288 作者:艾弗森哇 欄目:數據庫
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


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新竹市| 慈利县| 安塞县| 张北县| 兴化市| 岢岚县| 金沙县| 烟台市| 卢湾区| 长白| 即墨市| 玛多县| 江川县| 太和县| 独山县| 额尔古纳市| 大港区| 襄城县| 望谟县| 革吉县| 搜索| 秦皇岛市| 潢川县| 华容县| 璧山县| 佛冈县| 民丰县| 黄大仙区| 阜阳市| 临猗县| 竹溪县| 苏州市| 三江| 英吉沙县| 奈曼旗| 津南区| 阿坝县| 嵊州市| 广宗县| 湖北省| 肃南|