MongoDB学习笔记二- Mongoose
MongoDB学习笔记二 Mongoose
Mongoose 简介
- 之前我们都是通过
shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 - 而
Mongoose就是一个让我们可以通过Node来操作MongoDB的模块 - Mongoose是一个对象文档模型
(ODM)库,它对Node原生的MongoDB模块进行了进一步的优化封装, 并提供了更多的共嗯那个 - 在大多数情况下, 它被用来把结构化的模式应用到一个MongoDB集合, 并提供了验证和类型转换等好处
Mongoose的好处
- 可以为文档创建一个模式结构
(Schema)- 约束 - 可以对模型中的对象/文档进行验证
- 数据可以通过类型转换转换为对象模型
- 可以使用中间件来应用业务逻辑挂钩
- 比Node原生的MongoDB驱动更容易
新的对象
- mongoose中为我们提供了几个新的对象
- Schema对象定义约束了数据库中的文档结构
- Model
- Model 对象作为集合中的所有文档的表示, 相当于MongoDB数据库中的集合
Collection
- Model 对象作为集合中的所有文档的表示, 相当于MongoDB数据库中的集合
- Document
- Document表示集合中的具体文档, 相当于集合中的一个具体的文档
1. 通过Mongoose连接MongoDB
- 使用Mongoose必须先安装
mongoose包npm install mongoose
- 加载Mongoose
const mongoose = require("mongoose");
- 连接数据库
mongoose.connect("mongodb://地址")- 地址例子:
mongodb://127.0.0.1/test
- 断开连接
mongoose.disconnect()
**注意**: 如果端口号是默认端口号(27017) 则可以省略不写
2. 监听MongoDB数据库的连接状态 - connection
connection
- 一旦连接了MongoDB数据库, 底层的
Connection对象就可以通过mongoose模块的connection属性来访问 connection对象是对数据库连接的抽象, 它提供了对象连接、底层的Db对象和表示结合的Model对象的访问- 并且可以对
connection对象上的事件进行监听, 来获悉数据库连接的开始与断开 - 比如, 可以
open和close事件来监控连接的打开和关闭
以上都是官方的废话, 简单来说:
- 在mongoose对象中, 有一个属性叫做connection, 该属性表示的就是数据库连接
- 通过监视该对象的状态, 可以来监听数据库的连接与断开
数据库连接成功的事件
mongoose.connection.once("open",function(){});
数据库连接断开的事件(一般不需要调用)
mongoose.connection.once("close",function(){});
3. helloMongose
// 01- helloMongose.js
// 引入mongoose模块
const mongoose = require("mongoose");
// 连接数据库
mongoose.connect("mongodb://localhost:27017/test");
// 测试是否连接成功
mongoose.connection.once("open", function () {
// 连接成功执行
console.log('连接成功~');
});
执行后可以看到已经成功连接上数据库了

但是注意: 在上面截图中我们可以看到有一行错误提示:

翻译过来意思为
- 当前URL字符串解析器已弃用,并将在未来版本中删除。要使用新的解析器,请将选项{useNewUrlParser: true}传递给MongoClient.connect。
- 这个报错不会影响程序运行, 但是按照规范,我们将代码改成下面这样
mongoose.connect("mongodb://localhost:27017/test",{useNewUrlParser: true ,useUnifiedTopology: true});
4. 创建Schema 模式对象
- 使用
Mongoose你必须经常定义模式 - 模式为集合中的文档定义字段和字段类型
- 如果你的数据是被结构化成支持模式的, 这是非常有用的
- 简单来说, 模式就是对文档的约束, 有了模式, 文档中的字段必须符合模式的规定, 否则将不能正常操作
4.1 定义模式
- 模式为集合中的文档定义字段和字段类型
- 对于在模式中的每个字段, 你都需要定义一个特定的值类型, 受支持的类型如下:
StringNumberBooleanArrayBufferDateObjectId或OidMixed
- 需要为你计划使用的每个不同的文档类型都定义一个模式
4.2 创建模式定义
- 模式需要通过
mongoose的Schema属性来创建, 这个属性是一个构造函数new Schema(definition,option)definition:描述模式options: 配置对象, 定义数据库中集合的交互
4.3 options常用选项
autoIndex
- 布尔值, 开启自动索引, 默认truebufferCommands
- 布尔值, 缓存由于连接问题无法执行的语句, 默认truecapped
- 集合中最大文档数量collection
- 指定应用Schema的集合名称id
- 布尔值,是否有应用于_id的id处理器, 默认true_id
- 布尔值, 是否自动分配id字段,默认truestrict
- 布尔值, 不符合Schema的对象不会被插入进数据库,默认true
4.4 代码
代码:
const mongoose = require("mongoose");
// 连接数据库
mongoose.connect("mongodb://localhost:27017/test",{useNewUrlParser: true ,useUnifiedTopology: true});
// 测试是否连接成功
mongoose.connection.once("open", function () {
// 连接成功执行
console.log('连接成功~');
});
// 创建Schema对象, 赋值给一个变量
const Schema = mongoose.Schema;
// 创建Schema(模式)对象
const stuSchema = new Schema({
name: String,
age: Number,
gender: {
type:String,
default:'男'
},
address:String
});
这个时候还不能将数据插入到数据库中, 还需要定义 Model模型对象
5. Model模型对象
- 创建模型对象需要使用
mongoose的model()方法,语法如下:model(name.[schema],[collection],[skipInit])name:相当于模型的名字, 以后可以通过name找到模型schema: 创建好要应用的模型对象collection: 是要连接的集合名skipInit: 是否跳过初始化, 默认是false
- 一旦把一个
Schema对象编译成一个Model对象, 你就完全准备好开始在模型中访问、添加、删除、更新和删除文档了。 也就是说有了模型以后我们就可以操作数据库了
5.1 实现代码
// 引入mongoose模块
const mongoose = require("mongoose");
// 连接数据库
mongoose.connect("mongodb://localhost:27017/test",{useNewUrlParser: true ,useUnifiedTopology: true});
// 测试是否连接成功
mongoose.connection.once("open", function () {
// 连接成功执行
console.log('连接成功~');
});
// 创建Schema对象, 赋值给一个变量
const Schema = mongoose.Schema;
// 创建Schema(模式)对象
const stuSchema = new Schema({
name: String,
age: Number,
gender: {
type:String,
default:'男'
},
address:String
});
// 通过Scheme来创建Model
// Model代表的是数据库中的集合, 通过Model才能对数据库进行操作
// mongoose.model(modelName,schema);
// modelName: 就是要映射的集合名称, mongoose会自动将集合名变成复数
// schema: 创建的Schema对象
const stuModel = mongoose.model('student', stuSchema);
// 向数据库中插入一个文档
// stuModel.create(doc,function(err){})
stuModel.create({
name: '小明',
age: 18,
gender: '男',
address:'上海'
}, function (err) {
if (!err) {
console.log('插入成功');
}
})
运行结果:

点开数据库后可以发现数据已经插入成功了

MongoDB学习笔记二- Mongoose的更多相关文章
- MongoDB学习笔记(二) 通过samus驱动实现基本数据操作
传统的关系数据库一般由数据库(database).表(table).记录(record)三个层次概念组成,MongoDB是由(database).集合(collection).文档对象(documen ...
- MongoDB学习笔记二:使用Docker安装MongoDB
目录 Docker安装MongoDB Docker给MongoDB设置用户密码 NoSQL Manager for MongoDB连接 为admin赋权限 上一个笔记介绍了Windows下安装Mong ...
- MongoDB学习笔记二—Shell操作
数据类型 MongoDB在保留JSON基本键/值对特性的基础上,添加了其他一些数据类型. null null用于表示空值或者不存在的字段:{“x”:null} 布尔型 布尔类型有两个值true和fal ...
- Mongodb学习笔记二(Mongodb基本命令)
第二章 基本命令 一.Mongodb命令 说明:Mongodb命令是区分大小写的,使用的命名规则是驼峰命名法. 对于database和collection无需主动创建,在插入数据时,如果databas ...
- MongoDB学习笔记二:创建、更新及删除文档
插入并保存文档 对目标集使用insert方法插入一个文档: > db.foo.insert({"bar" : "baz"}) 这个操作会给文档增加一个&q ...
- MongoDB学习笔记(二)
MongoDB的其他方法: 显示指定数目的数据: 1.在mongodb中查询指定数目的记录,可以使用: db.collectionname.find().limit(number); 2.在mongo ...
- Mongodb 学习笔记(二) :索引
Mongodb 是基于集合建立索引 (Index),索引的作用类似于传统关系型数据库,目的是为了提高查询速度 . 如果没有建立索引, Mongodb 在读取数据时必须扫描集合中的 所有文档记录. 这 ...
- MongoDB学习笔记之Mongoose的使用
http://blog.csdn.net/sinat_25127047/article/details/50560167
- MongoDB学习笔记(转)
MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...
随机推荐
- 光学动作捕捉系统中的反光标识点(Marker点)
动作捕捉系统本质上是一种定位系统,通常需要在目标物布置定位设备进行追踪.以红外光学为原理的动作捕捉系统,主要由由光学镜头.动作捕捉软件.反光标识点.POE交换机.和若干配件组成,其中反光标识点(Mar ...
- Spring常见问题(五)
1.静态资源访问配置 绝对路径:访问静态资源. <mvc:resources location="/js/" mapping="/js/**">&l ...
- 7.15考试总结(NOIP模拟16)[Star Way To Heaven·God Knows·Lost My Music]
败者死于绝望,胜者死于渴望. 前言 一看这个题就来者不善,对于第一题第一眼以为是一个大模拟,没想到是最小生成树. 对于第二题,先是看到了状压可以搞到的 20pts 然后对着暴力一顿猛调后来发现是题面理 ...
- 基于小熊派Hi3861鸿蒙开发的IoT物联网学习【二】
HarmonyOS内核开发-信号量开发案例学习记录 一.LiteOS里面的任务管理介绍: 任务状态通常分为以下四种: 就绪(Ready):该任务在就绪列表中,只等待CPU. 运行(Running) ...
- 构建前端第10篇之---Function.prototype.call()
张艳涛写于2020-01-25,参考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/ ...
- Cookie、Session、JWT在koa中的应用及实现原理
目录 Cookie 重要属性 实现原理 cookie签名实现原理 注意事项 Session 实现原理 JWT 使用方式 组成 实际应用 实现原理 前端存储方式 cookie session local ...
- Hadoop 3.1.1 - Yarn - 使用 GPU
在 Yarn 上使用 GPU 前提 目前,Yarn 只支持 Nvidia GPU. YARN NodeManager 所在机器必须预先安装了 Nvidia 驱动器. 如果使用 Docker 作为容器的 ...
- Java 反射(二)运行时获取类的信息
目录 一.获得类的运行时结构 1. 获得类的名字 2. 获得类的属性 获取属性列表 获取指定属性 3. 获取类的方法 获得类的方法列表 获得指定方法 4. 获得的构造器 获得构造器列表 获得指定构造器 ...
- tomcat启动时启动窗口出现乱码一招搞定
先来看看问题(图示),在tomcat的启动窗口打印的启动信息中包含了大量的中文乱码,虽然这些对tomcat本身的使用没有任何影响,但却非常碍眼,影响视觉效果! tomcat启动时启动窗口出现乱码的解决 ...
- shell——if、case例题
目录 例题一:检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限 例题二:提示用户输入100米赛跑的秒数,要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果 ...