手拉手开发nodejs电影cms系统①:内容规划,导航分类,视频数据,用户,留言

有作过站长,或者玩过视频cms的朋友应该了解过市场上有种类繁多的php视频cms,作完一个作过站长的垃圾前端工程师,想了半天,作点贡献(其实就是本身想写),写一套nodejs+mongodb的cms怎么样呢(实际上是由于失业,心情不大好,转移情绪)。php

第一章手拉手开发nodejs电影cms系统①:内容规划,导航分类,视频数据,用户,留言
第二章手拉手开发nodejs电影cms系统②:定时任务,视频源数据,初始化数据
第三章手拉手开发nodejs电影cms系统③:宝塔面板懒人部署前端

第一章,内容规划

后台部分

按功能来划分,视频数据,留言模块,用户模块,配置模块,其余模块(导航,分类),模板模块,定时认为模块,脚本管理模块。node

前台部分

按页面来分,主页面(展现各种信息),详情页(展现单条数据的信息),播放页(展现单条数据的信息+播放),我的中心(修改密码,修改昵称),分类页(所有分类,年代,地区),搜索页(搜索数据),导航页(某个导航下的全部分类数据)mongodb

导航分类(后台)

先要肯定分类字段,在电影网站的分类页面,都会有分类的单独描述,关键字(这里简称seo信息)。导航下也许存在二级分类(可能须要联表查询子分类),导航能够设置显示隐藏。导航万一要调整输出顺序呢?(因此index位置少不了)
name(用于导航名称),display(显示隐藏),parent_id(存在父级导航,那么存父级的_id,不存在则存false,用于判断真假,是不是一级导航或者二级分类),seo信息用于存储image.pngsegmentfault

{
    "name" : "动做片",
    "parent_id" : ObjectId("5e819a8619f4d790bc5d0c76"),
    "display" : true,
    "seo" : {
        "title" : "动做片",
        "keywords" : "动做片",
        "description" : "动做片"
    },
    "type" : "nav_type",
    "index" : 0  
}

视频数据(后台)

先要肯定数据字段,有哪些字段??字段设置成什么类型合适??
这里我参照资源网的来思考作数组

标题,导演,主演,更新时间,描述,更新状态,封面,语言,地区,发布时间。这几个字段是必需要有的,
这里须要注意的是,若是搜索中药作演员表索引搜索的话,最好吧演员表这里设置成数组.例: ["靳东","蒋欣"];
这样在mongodb中使用$in操做符方便查找演员,我这里由于不作演员索引,索引就直接字符串来存。
若是不是存的数组,存字符串来查找演员,那么免费版芒果,只能用正则,很浪费时间前端工程师

image.png
其余功能好比: 显示隐藏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"
}

那么索引到的数据大概就是这样↓
image.pngpost

用户模块

用户信息最少也须要有三个字段,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打篮球的那种前端去搞留言)作留言的时候麻烦过,怎么规划?有啥字段。
这里以楼中楼形式留言为模型。
image.png

数据字段以下:

  • _id系统自带,用于表示本条数据的惟一id,
  • vid用于关联视频表中对应视频的惟一_id,
  • uid用于关联用户表中对应的用户的惟一_id,
  • pid用于查找本条留言的父一级(这里指盖楼那个小崽子那条留言的_id)
  • wid楼里面的留言确定是对某某人进行的,你回复了哪一个鳖孙??就是那个鳖孙的惟一_id
{
    "_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" : "达大厦"
}

和视频数据关联分类数据同样,咱们不能每条留言吧用户名和对谁回复写死,万一对方更名了呢??你全表在找到旧的数据疯狂替换吗?因此这里还得用联表查询。

查找留言的时候,规则以下:
先找到一级评价,也就是盖楼那个鳖孙
image.png

image.png

而后循环这两条数据,用这两条数据_id,去找盖楼的下面的二级回复的数据,找到吧他们加到本条数据(盖楼的那条数据)的children字段里面
image.png

至此留言和用户部分结束。

相关文章
相关标签/搜索