LeoTalk.cn
自由、随心、随性!

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

第一章,内容规划

后台部分

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

前台部分

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

导航分类(后台)

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

{
    "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操作符来联表查询

{
    $lookup: {
        from: "other",                   // 关联的表 名称
        localField: "video_type",        // 当前表的字段 需要关联到目标表
        foreignField: "_id",             // 目标表和当前表字段对应的字段
        as: "type"                       // 输出的字段
    }
},
{
    $unwind: "$type"
}

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

用户模块

用户信息最少也需要有三个字段,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

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

赞(0) 打赏
未经允许不得转载:LeoTalk » 开发nodejs电影cms系统①:内容规划,导航分类,视频数据,用户,留言
标签:

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏