走到这一步,我们的网站还不能称为动态的网站,因为所要的数据都是伪造的,所以现在要对数据库的模型进行设计
 
Mongoose
我们用到的工具模块是Mongoose,他能对Mongodb进行建模的这样一个操作,在Mongoose里面有这样几个概念,分别是
Schema: 模式,在模式里面我们对数据进行定义,定义字段对类型,比如是字符串类型,还是数字类型
Model: 模型,编译模型,对传入对Schema进行编译,然后会生成构造函数
Documents: 文档
Schema-模式定义
var mongoose = require('mogoose');
var MovieSchema = new mongoose.Schema({
  doctor:String,
  title:String,
  language:String,
  country:String,
  year:Number,
  summary:String
})
Model-编译模型
var mongoose = require('mongoose');
var MovieSchema = require('./schemas/movie');
var Movie = mongoose.model('Movie',MovieSchema)
module.exports = Movie
有了数据库模型以后,事情就变得好办了,现在对文档实例化,只需要调用模型,也就是这个构造函数,传入一条数据,然后再调用save方法,就可以把这条数据给传入到数据库里面去
//Documents-文档实例化
var Movie = require('./model/movie');
var movie = new Movie({
  title:'机械战警',
  doctor:'何塞.帕迪利亚',
  year:2018
})
movie.save(function(err){
  if(err){
    return handleError(err);
  }
})
数据库的查询分成多种,查询批量的,单条的,或者指定条件的查询,那么批量查询只需要调用模型的find方法,传一个空对象就ok了
//Documents - 数据库批量查询
var Movie = require('./models/movie');
app.get('/',function(req,res){
Movie
  .find({})
  .exec(function(err,movies){
    res.render('index',{
      title:'imooc首页',
      movies:movies
    })
  })
})
单条的话,传入一个特定的key,比如Movie.findOne
//Documents - 数据库单条查询
var Movie = require('./models/movie');
app.get('/',function(req,res){
  Movie
  .findOne({_id:id})
  .exec(function(err,movies){
    res.render('index',{
      title:'imooc首页',
      movies:movies
    })
  })
})
单条数据的删除,直接调用模型的remove方法,传入一个特定的key和value就可以了
//Documents - 数据库单条删除
var Movie = require('./models/movie');
app.get('/',function(req,res){
  Movie
    .remove({_id:id},function(err,movie){
      if(err){
        console.log(err);
      }
    })
})
然后我们需要调整一下模式和模型,他们目录的层次
nodeMongodb
  node_modules
  bower_components
  view
    index.jade
    detail.jade
    admin.jade
    list.jade
  models
    movie.js
  schemas
    movie.js
  app.js
最后我们来实现数据库的增删改查,以及开发后端的逻辑
 
 

mongodb模式模型设计及编码-Mongoose的更多相关文章

  1. H264帧内预测模式编号的编码过程

    1 本文词汇约定 宏块:H264编码基本单元,16x16像素(或采样)构成 块:   由8x8像素(或采样)构成的单位 子块:   由4x4像素(或采样)构成的单位 2 帧内亮度预测模式 H264规范 ...

  2. Mongodb相关 (Shell命令 / mongoose)

    Mongodb相关 1.创建一个文件夹作为数据库存放的目录 2.打开cmd cd到Mongodb/bin目录去 3.执行mongod --dbpath "第一项创建的文件夹(数据库数据存放目 ...

  3. MongoDB数据模型设计

    MongoDB的数据模式是一种灵活模式,其集合并不限制文档结构.这种灵活性让对象和数据库文档之间的映射变得很容易,即使数据记录之间有很大的变化,每个文档也可以很好的映射到各条不同的记录.但在实际使用中 ...

  4. 关系型数据库与Key-value型数据库Mongodb模式设计对比

    MongoDb 相比于传统的 SQL 关系型数据库,最大的不同在于它们的模式设计( Schema Design )上的差别,正是由于这一层次的差别衍生出其它各方面的不同. 我们可以简单的认为关系型数据 ...

  5. MongoDB学习day08--Mongoose索引、Mongoose内置方法、扩展Mongoose Model的静态方法和实例方法

    一.Mongoose索引 索引是对数据库表中一列或多列的值进行排序的一种结构, 可以让我们查询数据库变得更快. MongoDB 的索引几乎与传统的关系型数据库一模一样, 这其中也包括一些基本的查询优化 ...

  6. Mongodb学习(1)--- mongoose: Schema, Model, Entity

    Schema : 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model : 由 Schema 发布生成的模型,具有抽象属性和行为的数据库操作 Entity : 由 Model 创建的 ...

  7. MongoDB 进阶模式设计

    原文链接:http://www.mongoing.com/mongodb-advanced-pattern-design 12月12日上午,TJ在开源中国的年终盛典会上分享了文档模型设计的进阶技巧,就 ...

  8. MongoDB 和 Mongoose 04

    一.安装 1. 相关 https://www.mongodb.org/dl/win32/ MongoDB的版本偶数版本为稳定版,奇数版本为开发版 MongoDB对于32位系统支持不佳,所以3.2版本以 ...

  9. Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录(二)

    用mogoose搭建restful测试接口 接着上一篇(Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录(一))记录,今天单独搭建一个restful测试接口,和项目前 ...

随机推荐

  1. python:一行代码实现局域网共享文件

    其实就是使用python内置的一个模块http server 在python2中是下面这样的 python -m SimpleHTTPServer 80 解释下上面的参数,-m表示让python使用一 ...

  2. 终端、虚拟终端、shell、控制台、tty的区别

    终端与控制台的区别? 最近开始接触Linux,终端.虚拟终端.shell.控制台.tty等概念让我很混乱,有必要认识清楚. 今天看到有人问终端和控制台的区别,而且这个问题比较有普遍性,因此想抽出一点时 ...

  3. Alt+~,Alt+Tab

    Alt+~可以很方便的切换同一个软件中的内容. Alt+Tab可以很方便的切换不同软件之间的内容. 熟练使用,很方便.

  4. [转帖]【JVM 知识体系框架总结】

    [JVM 知识体系框架总结] https://www.cnblogs.com/mousycoder/p/11612448.html JVM 内存分布 线程共享数据区:方法区->类信息,静态变量堆 ...

  5. K8S 从入门到放弃系列文章目录(Kubernetes 1.14)

    1)软件环境 软件 版本 系统 Centos7.5 Kubernetes 1.14.1 Docker 18.09 Calico 3.6 Etcd 3.3.12 2)部署过程简单概要 三台master节 ...

  6. keras损失函数详解

    以下信息均来自官网 ------------------------------------------------------------------------------------------ ...

  7. ASP.NET Core 过滤器

    继承Attribute,IActionFilter实现自己的过滤器类,并且在Startup,mvc服务中注入. 全局都会过滤,在任意一个controller,action执行前和执行后都会过滤一次 通 ...

  8. docker网络相关

    1.网卡有namespace的概念,不同的俩个namesp之间的网卡不能直接通信 为了俩个namespace的网卡相互通信,可以通过veth pair(一对)来实现.不同容器之间,便是通过veth p ...

  9. (七)easyUI之Accordion折叠面板:普通的静态面板

    一.普通的静态面板 前台 <%@ page language="java" contentType="text/html; charset=UTF-8" ...

  10. (二十八)jsp之EL表达式

    一.EL表达式简介 EL 全名为Expression Language.EL主要作用: 1.获取数据 EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象.获取数 ...