走到这一步,我们的网站还不能称为动态的网站,因为所要的数据都是伪造的,所以现在要对数据库的模型进行设计
 
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. maven中央仓库的配置在哪里?superpom是什么?中央仓库查找三方包

    maven的superpom 每个项目都默认继承的pom 位置 $M2_HOME/lib/maven-model-builder.jar 使用tar -xvf解压后,grep -r central 搜 ...

  2. Mybatis映射文件sql语句注意事项

    1.插入

  3. 用ExtentReports美化你的测试报告

    前言 在实际的自动化测试工作中经常会用到一些报告生成工具大概分为两类,一类是测试框架自带的报告生成工具如:JUnit+Ant.TestNG:另一类就是专用报告工具如ReportNG等.这些报告要么在U ...

  4. js 实现数字格式化(货币格式)几种方法

    // 方法一 function toThousands(num) { var result = [ ], counter = 0; num = (num || 0).toString().split( ...

  5. ubuntu的sudo免密

    ubuntu的sudo免密与centos大同小异,都是在/etc/sudoers中添加用户信息,添加的内容也一样,只是位置不一样. centos的位置如下: 而ubuntu的位置如下: 除此之外,两行 ...

  6. cent8安装postgres

    postgres是一款免费.开源的对象型关系数据库,其在cent8的安装方式与cent7的不太一样,特此记录. 步骤: 1 安装postgres server dnf install postgres ...

  7. 前后端分离,如何防止api接口被恶意调用或攻击

    无论网站,还是App目前基本都是基于api接口模式的开发,那么api的安全就尤为重要了.目前攻击最常见的就是“短信轰炸机”,由于短信接口验证是App,网站检验用户手机号最真实的途径,使用短信验证码在提 ...

  8. 90%程序员都没有完全答对Cookie和Session的区别

    我在做面试官的时候,曾经问过很多朋友这个问题: Cookie 和 Session 有什么区别呢?大部分的面试者应该都可以说上一两句,比如:什么是 Cookie?什么是 Session?两者的区别等. ...

  9. PCA降维笔记

    PCA降维笔记 一个非监督的机器学习算法 主要用于数据的降维 通过降维, 可以发现更便 于人类理解的特征 其他应用:可视化:去噪 PCA(Principal Component Analysis)是一 ...

  10. python之文件读写操作笔记

    对不同类的文件操作,需要调用相关的库文件,一般情况下,可以选择建立:写文件函数和读文件函数.在写文件与读文件函数中 我们可以采用:with  open('文件名','w', encoding='utf ...