有作過站長,或者玩過視頻cms的朋友應該瞭解過市場上有種類繁多的php視頻cms,作完一個作過站長的垃圾前端工程師,想了半天,作點貢獻(其實就是本身想寫),寫一套nodejs+mongodb的cms怎麼樣呢(實際上是由於失業,心情不大好,轉移情緒)。php
第一章手拉手開發nodejs電影cms系統①:內容規劃,導航分類,視頻數據,用戶,留言
第二章手拉手開發nodejs電影cms系統②:定時任務,視頻源數據,初始化數據
第三章手拉手開發nodejs電影cms系統③:寶塔面板懶人部署前端
按功能來劃分,視頻數據,留言模塊,用戶模塊,配置模塊,其餘模塊(導航,分類),模板模塊,定時認爲模塊,腳本管理模塊。node
按頁面來分,主頁面(展現各種信息),詳情頁(展現單條數據的信息),播放頁(展現單條數據的信息+播放),我的中心(修改密碼,修改暱稱),分類頁(所有分類,年代,地區),搜索頁(搜索數據),導航頁(某個導航下的全部分類數據)mongodb
先要肯定分類字段,在電影網站的分類頁面,都會有分類的單獨描述,關鍵字(這裏簡稱seo信息)。導航下也許存在二級分類(可能須要聯表查詢子分類),導航能夠設置顯示隱藏。導航萬一要調整輸出順序呢?(因此index位置少不了)
name(用於導航名稱),display(顯示隱藏),parent_id(存在父級導航,那麼存父級的_id,不存在則存false,用於判斷真假,是不是一級導航或者二級分類),seo信息用於存儲segmentfault
{ "name" : "動做片", "parent_id" : ObjectId("5e819a8619f4d790bc5d0c76"), "display" : true, "seo" : { "title" : "動做片", "keywords" : "動做片", "description" : "動做片" }, "type" : "nav_type", "index" : 0 }
先要肯定數據字段,有哪些字段??字段設置成什麼類型合適??
這裏我參照資源網的來思考作數組
標題,導演,主演,更新時間,描述,更新狀態,封面,語言,地區,發佈時間。這幾個字段是必需要有的,
這裏須要注意的是,若是搜索中藥作演員表索引搜索的話,最好吧演員表這裏設置成數組.例: ["靳東","蔣欣"];
這樣在mongodb中使用$in操做符方便查找演員,我這裏由於不作演員索引,索引就直接字符串來存。
若是不是存的數組,存字符串來查找演員,那麼免費版芒果,只能用正則,很浪費時間前端工程師
其餘功能好比: 顯示隱藏display,容許留言replay,置頂popular,能夠設置布爾值分佈式
{ "videoTitle" : "若是歲月可回頭", "director" : "張建棟", "videoImage" : "https://img.sokoyo-rj.com/tuku/upload/vod/2020-03-20/202003201584709196.jpg", "poster" : "/upload/poster/2c726d3d-4afb-46d9-b86f-32718ad6fc08.jpg", "video_tags" : [], "performer" : "靳東,蔣欣,李宗翰,李乃文,左小青,趙子琪,傅晶,陳冰", "video_type" : ObjectId("5e7e0c2747c77574c0c55429"), "video_rate" : 0, "update_time" : "2020-03-27 22:16:02", "language" : "國語", "sub_region" : "大陸", "rel_time" : "2020", "introduce" : "同一個城市中,三個彼此陌生的家庭都出事了,三個婚姻失敗的家庭孤獨無助難以自拔,不約而同想換 個活法,逃避現實生活的殘酷。一個有着一段風雨過去的女人介入了他們的顛覆,等待他們的是無盡的未知,瘋狂玩樂代孕豔遇快意恩仇。有人選擇順從宿命,有人選擇逆天而愛,歷經了萬水千山,是從新回頭仍是拒絕,他們該如何面對?", "remind_tip" : "更新至14集", "popular" : true, "allow_reply" : false, "display" : true, "scource_sort" : false }
一個電影在展現的時候是須要找對應的分類,若是字段寫死了,那麼後期想修改分類的名稱,就要找到全部的視頻數據,批量替換舊的分類名稱,這就很差了。最好的辦法就是《聯表查詢》,mongo提供了聯表查詢的操做,使用管道aggregate操做符來聯表查詢ide
{ $lookup: { from: "other", // 關聯的表 名稱 localField: "video_type", // 當前表的字段 須要關聯到目標表 foreignField: "_id", // 目標表和當前表字段對應的字段 as: "type" // 輸出的字段 } }, { $unwind: "$type" }
那麼索引到的數據大概就是這樣↓post
用戶信息最少也須要有三個字段,username(用戶名), password(密碼),nickname(暱稱)
其餘的好比,顯示隱藏display, 權限位置高低grade_id,是否默認default,能夠作,這裏以最簡單的爲例子
密碼能夠md5或者md5+hash,或者加點鹽??
_id 是mongodb插入時自帶的惟一索引的字段,對於分佈式來講解決了id重複的問題,咱們能夠直接用。省去了本身生成id的麻煩事了,自帶惟一索引,血賺
{ "_id" : ObjectId("5e7e35cf4345c47a1c8c15f6"), "userName" : "abcdxxxx", "passWord" : "ba0a086c8a7b0ca4232406b5efff3a95", "nickName" : "阿打算", "admin" : false, "display" : true, "default" : false, "grade_id" : 0 }
可能新同窗(這裏指的是cxk打籃球的那種前端去搞留言)作留言的時候麻煩過,怎麼規劃?有啥字段。
這裏以樓中樓形式留言爲模型。
數據字段以下:
{ "_id" : ObjectId("5e7f93a60eefb36e54fe8f72"), "vid" : ObjectId("5e7e15b04a285358100e3d6f"), "uid" : ObjectId("5e7e35cf4345c47a1c8c15f6"), "pid" : false, "wid" : false, "agree" : true, "display" : true, "date" : 1585419174015.0, "sub_date" : 1585419174014.0, "text" : "達大廈" }
和視頻數據關聯分類數據同樣,咱們不能每條留言吧用戶名和對誰回覆寫死,萬一對方更名了呢??你全表在找到舊的數據瘋狂替換嗎?因此這裏還得用聯表查詢。
查找留言的時候,規則以下:
先找到一級評價,也就是蓋樓那個鱉孫
而後循環這兩條數據,用這兩條數據_id,去找蓋樓的下面的二級回覆的數據,找到吧他們加到本條數據(蓋樓的那條數據)的children字段裏面
至此留言和用戶部分結束。