有作过站长,或者玩过视频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字段里面
至此留言和用户部分结束。