教你如何用 MongoDB 實現評論榜功能
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會快,但是也扛不住量啊, 但是數量小的話,還是可以接受的, 其實理想的狀態是評論可以以分頁的形式獲取出來, 感覺才正宗。
原文連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2656547/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java實現評論回覆功能Java
- 「擴充」實現評論 @ 多人通知功能
- 教你如何用SQLite 實現if not exist 類似功能的操作SQLite
- PHP無限級評論回覆功能實現PHP
- 思否評論區 @ 人的功能實現
- MongoDB 在評論中臺的實踐MongoDB
- 教你如何用vbs實現微信自動傳送訊息功能
- 文章評論功能前後端實現方案總結後端
- 教你如何用smokeping實現釘釘告警
- 教你如何用 Java 實現非同步呼叫Java非同步
- php+mysql+html實現五角星評論功能PHPMySqlHTML
- 教你如何用MongoDB檢視版本資訊詳解MongoDB
- 評論模組 – 後端資料庫設計及功能實現後端資料庫
- 評論模組 - 後端資料庫設計及功能實現後端資料庫
- 關於實現論壇的回覆評論
- Wordpress 評論功能Xss 始末
- 可行的二級評論實現
- 萬字教你如何用 Python 實現線性規劃Python
- Django搭建個人部落格:用django-mptt實現多級評論功能Django
- 使用者評論程式碼實現
- idou老師教你學Istio:如何用 Istio 實現速率限制
- 教你如何用WPF實現文字粒子閃爍動畫效果動畫
- 3 條 sql 是實現知乎評論,7 條 sql 實現點贊 + 評論,且可擴充套件SQL套件
- 如何用Python實現iPhone X的人臉解鎖功能?PythoniPhone
- Jquery實現微博分享評論表情特效jQuery特效
- idou老師教你學Istio 23 : 如何用 Istio 實現速率限制
- 教你如何用python實現學生通訊錄管理系統Python
- MongoDB在vivo評論中臺的應用案例MongoDB
- Steam實裝按遊戲時長過濾評論功能遊戲
- 帝國CMS如何新增評論功能
- 教你python tkinter實現簡單計算器功能Python
- 論如何用Vue實現一個彈窗-一個簡單的元件實現Vue元件
- 如何用華為影像服務快速實現濾鏡功能
- 使用Redis的有序集合實現排行榜功能Redis
- 動態ip代理教你:如何用爬蟲實現前端頁面渲染爬蟲前端
- 評論回覆功能,總結開發-JavaJava
- 資料庫設計——評論回覆功能資料庫
- idou老師教你學Istio06: 如何用istio實現流量遷移