Mongoose学习笔记
#名词解释:
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学习笔记的更多相关文章
- mongoose学习笔记1--基础知识1
今天我们将学习Mongoose,什么是Mongoose呢,它于MongoDB又是什么关系呢,它可以用来做什么呢? MongoDB是一个开源的NoSQL数据库,相比MySQL那样的关系型数据库,它更显得 ...
- mongoose学习笔记3--简单查询1
简述 查询就是返回一个集合中的文档的子集 Mongoose 模型提供了 find. findOne. findById 三种方法用于文档查询. 为了方便后面课程的有效学习,我们先添加一些测试数据. T ...
- mongoose学习笔记1--基础知识2
Schema简述 Schema —— 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力,仅仅只是数据库模型在程序片段中的一种表现,可以说是数据属性模型(传统 ...
- mongoose学习笔记2--增删改查1
查询 之前我们的集合已经创建成功,我们就先来进行第一步操作 —— 查询. 查询分很多种类型,如条件查询,过滤查询等等,今天只学习了最基本的find查询. 举例: 1.find查询: obj.find( ...
- [转] mongoose学习笔记(超详细)
名词解释 Schema: 一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力 Model: 由Schema编译而成的假想(fancy)构造器,具有抽象属性和行为.Model的每一个实例(ins ...
- mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
最后更新时间:2017-07-13 11:10:49 原始文章链接:http://www.lovebxm.com/2017/07/13/mongodb_primer/ MongoDB - 简介 官网: ...
- 【转】mongoDB 学习笔记纯干货(mongoose、增删改查、聚合、索引、连接、备份与恢复、监控等等)
mongoDB 学习笔记纯干货(mongoose.增删改查.聚合.索引.连接.备份与恢复.监控等等) http://www.cnblogs.com/bxm0927/p/7159556.html
- MongoDB学习笔记二- Mongoose
MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
随机推荐
- 荣品RP4412开发板烧写Ubuntu系统应注意SD卡内存大些
问:RP4412开发板用SD卡烧写光盘中的fastboot失败,现在如何补救呢? 答:INAND格式化, 利用usb来升级啊, 也有文档,看升级文档. 问: 这个是怎么回事? 答:你是升级什么系统? ...
- 苹果公布WWDC2016时间 并做了个程序员情怀网页
新浪手机讯 4月19日上午消息,苹果公司今日正式确定2016年全球开发者大会(WWDC)开幕时间:6月13-17日,并做了个非常有意思的代码风格页面. 网友戏称这个页面只有程序员们才能看懂,它的首页是 ...
- MVB帧
MVB帧有两种类型: 1.仅有总线主发布的主帧: 2.从设备相应主帧而发送的从帧: 一个主帧及其相应的从帧形成一个报文. 主帧起始分界符和从帧起始分界符是不同的,以防止同步滑移 主帧的长度 ...
- ROS笔记——创建简单的主题发布节点和主题订阅节点
在安装好ROS后,接着学习如何创建节点和节点之间的通信方式,以一个简单的主题发布节点和主题订阅节点说明. 节点是连接ROS网络等可执行文件,是实现某些功能的软件包,也是一个主要计算执行的进程. 一.创 ...
- activeMq 消费者整合spring
package com.mq.consumer; import javax.jms.JMSException;import javax.jms.Message;import javax.jms.Mes ...
- 关于springMVC3.0基于注解方式的项目搭建
前言:开发了几个月的AS3项目,感觉JAVA都用不太熟练了.刚好这几个抽的空,就把自己以前用过的Spring框架再搭一边, 并完整的记录下来 开发环境:tomcat + mysql+ java 1.所 ...
- asp.net mvc 防止开放重定向
/// <summary> /// 防止开发重定向,篡改returnurl /// </summary> /// <param name="request&qu ...
- React Native 打包.jsx文件
最近在研究React Native.感觉开发效率确实不错,但jsx语法写起来感觉不怎么顺手. 试用了Sublime Text 3和Visual Studio Code写代码,感觉反应总是慢一拍. 还是 ...
- JS 笔记(二) - 函数
1. 函数的 声明 1) 声明式写法 function j1(id){ alert(id); } 2) 声明匿名函数变量 var j2 = function (a, b) { alert(a + &q ...
- java之并发编程:Lock
这是转的:http://www.cnblogs.com/dolphin0520/p/3923167.html * 在多线程编程里面一个重要的概念是锁定,如果一个资源是多个线程共享的,为了保证数据的完整 ...