#名词解释:

  Schema 一种以文件形式存储的数据库模型骨架,不具备对数据库操作的能力

  Model 由Schema生成的模型,具有抽象属性和行为,能够操作数据库

  Entity 由Model创建的实体,可以操作数据库

  Schema 、 Model 、 Entity的关系:Schema生成Model,Model创建Entity;Model和Entity都可以操作数据库,但Model比Entity更具操作性。

#getting start(起飞)

下载mongoose包:

   npm install mongoose --save

然后开始干

  //加载mongoose包

  var mongoose = require('mongoose');

  //连接mongo数据库

  mongoose.collect(url)

  var db = mongoose.connection;

  //监听连接错误

  db.on('error',function(error){

    console.error(error)

  })

Everything in Mongoose starts with a Schema.

在mongoose中所有东西都是以Schema开始的。

那么就开始创建Schema:(Schema

var mySchema = new mongoose.Schema({

  name:String,

  age:Number,

  cityFrom:{

    type:'String',

    enum:['成都','重庆']

  }

})

这里解释一下

  name:String  定义一个属性name,它的类型是String

  age:Number  定义一个属性age,它的类型是Number

  city:{type:'String',enum:['成都','重庆']}  定义一个属性city,它的值又包含两个东西,其中type是它的类型,enum是验证器,表示只接受成都和重庆两个值。

再解释一下这个验证器(Validation)

  所有的Schema属性都可以有required这个验证器,表明是否非空

  Number类型有min和max验证器,表示最大最小值

  String类型有enum,match,maxlength和minlength验证器,enum表示范围,枚举验证;match表示匹配验证;maxlength表示最大长度验证;minlength表示最小长度验证

  validate 自定义验证规则(略,详见 Custom Validators

创建完Schema之后,就根据Schema来实例化数据库模型(Model

var MyModel = mongoose.model('MODEL_NAME',mySchema);

// MODEL_NAME这里是实例化数据库模型的名字,如果不存在则会创建。

这里需要注意一个问题,当Model_Name为单数名词的时候,mongoose会自动给你转换成复数形式(来自于:The first argument is the singular name of the collection your model is for. Mongoose automatically looks for the plural version of your model name.),在你的database中你会发现多了一个Model_Name复数形式的collection存在,接下来,你创建的实例化对象就会储存在这个collection中。

下面开始实例化对象(Entity

  var student = new MyModel({

    name:"薛将军",

    age:24,

    cityFrom:"成都"

  })

上面实例化对象的属性和值分别对应在创建Schema的时候的属性和属性所对应的类型,那么在实例化的时候如果属性的值不满足验证信息,则会出现验证失败的情况,验证时候会返回一个错误信息。

  以age值错误为例,age的类型是Number,当我们输入为String类型的时候,就会报错,在save的时候捕捉到:

  student.save(function(e){

    console.log(e.errors)  //错误集合(对象)

    console.log(e.errors.age)  //错误的属性(age)

    console.log(e.errors.age.message)  //错误属性的信息,提示错误发生的原因 

    console.log(e.errors.age.path) //错误属性的路径

    console.log(e.errors.kind)  //错误属性的类型  

    console.log(e.errors.value)  //错误属性的值

    ......

  })

以上为个人mongoose学习的总结,先总结到这里,在实际操作中遇到问题再来补充。

Mongoose学习笔记的更多相关文章

  1. mongoose学习笔记1--基础知识1

    今天我们将学习Mongoose,什么是Mongoose呢,它于MongoDB又是什么关系呢,它可以用来做什么呢? MongoDB是一个开源的NoSQL数据库,相比MySQL那样的关系型数据库,它更显得 ...

  2. mongoose学习笔记3--简单查询1

    简述 查询就是返回一个集合中的文档的子集 Mongoose 模型提供了 find. findOne. findById 三种方法用于文档查询. 为了方便后面课程的有效学习,我们先添加一些测试数据. T ...

  3. mongoose学习笔记1--基础知识2

    Schema简述 Schema —— 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统 ...

  4. mongoose学习笔记2--增删改查1

    查询 之前我们的集合已经创建成功,我们就先来进行第一步操作 —— 查询. 查询分很多种类型,如条件查询,过滤查询等等,今天只学习了最基本的find查询. 举例: 1.find查询: obj.find( ...

  5. [转] mongoose学习笔记(超详细)

    名词解释 Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model: 由Schema编译而成的假想(fancy)构造器,具有抽象属性和行为.Model的每一个实例(ins ...

  6. mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...

  7. 【转】mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)

    mongoDB 学习笔记纯干货(mongoose.增删改查.聚合.索引.连接.备份与恢复.监控等等) http://www.cnblogs.com/bxm0927/p/7159556.html

  8. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  9. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

随机推荐

  1. spring开发的总结

    1,当出现无法创建bean,( Error creating bean with name 'fileUploadService': Injection of resource dependencie ...

  2. android开发 兵器

    spring for android andriod anotatons 按android原生的方式写代码,会导致冗余,代码丑陋,开发效率低下. 最近对项目代码进行一些梳理和改进.

  3. C++中的数组

    数组名作为参数时,传递的是数组的首地址, 主调函数中实参数组元素个数不应该少于形参数组的元素个数 把数组名作为参数时,一般不指定数组第一维的大小 即使指定,编译时也会被忽略的.

  4. μC/OS-Ⅲ系统的中断管理

    一.典型的μC/OS-Ⅲ中断服务程序解析 μC/OS-Ⅲ系统中典型有内核参与中断服务程序示例如下: MyISR:                                             ...

  5. usb端口号绑定

    由于ubuntu USB设备号为从零开始依次累加,所以多个设备每次开机后设备号不固定,机器人每次开机都要蛋疼的按顺序插, 在网上找到一种方法:udev的规则 udev的规则说明,可以参考博客说明:ht ...

  6. VBA续嘘嘘

    什么是VBA?它有什么作用? A.实现Excel中没有实现的功能. B.提高运行速度. C.编写自定义函数. D.实现自动化功能. E.通过插入窗体做小型管理软件. VBA在哪里存放的?怎么运行? A ...

  7. GridView获取列子段的几种途径

    GridView是ASP.NET中功能强大的数据显示控件,它的RowDataBound事件为我们提供了方便的控制行.列数据的途径. 要获取当前行的某个数据列,我在实践中总结有如下几种方法: 1. Ce ...

  8. centos 6.6编译安装git-2.7.0 最新git编译安装

    系统环境:centos6.6 1,安装准备 yum -y install gcc zlib-devel openssl-devel perl cpio expat-devel gettext-deve ...

  9. 如何在MainWindowViewModel中引用MainWindow.xaml中的Resource?

    问题描述:在MainWindow.xaml的Window.Resource中定义了一个资源,如下: <xctk:Wizard x:Key="_wizard" FinishBu ...

  10. 例子:Bluetooth app to device sample

    本例子演示了: 判断蓝牙是否打开,是通过一个HRsult值为0x8007048F的异常来判断的 catch (Exception ex) { if ((uint)ex.HResult == 0x800 ...