MongoDB学习笔记二- Mongoose
2021/8/17 2:06:03
本文主要是介绍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 定义模式
- 模式为集合中的文档定义字段和字段类型
- 对于在模式中的每个字段, 你都需要定义一个特定的值类型, 受支持的类型如下:
String
Number
Boolean
Array
Buffer
Date
ObjectId
或Oid
Mixed
- 需要为你计划使用的每个不同的文档类型都定义一个模式
4.2 创建模式定义
- 模式需要通过
mongoose
的Schema
属性来创建, 这个属性是一个构造函数new Schema(definition,option)
definition
:描述模式options
: 配置对象, 定义数据库中集合的交互
4.3 options常用选项
autoIndex
- 布尔值, 开启自动索引, 默认true
bufferCommands
- 布尔值, 缓存由于连接问题无法执行的语句, 默认truecapped
- 集合中最大文档数量collection
- 指定应用Schema
的集合名称id
- 布尔值,是否有应用于_id
的id处理器, 默认true
_id
- 布尔值, 是否自动分配id
字段,默认true
strict
- 布尔值, 不符合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的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享
- 2024-12-10搭建个人博客网站之一、使用hugo创建个人博客网站