文章目录
- 前言
- 一、Mongoose是什么?
- 二、使用步骤
- 1.引入库
- 2.连接数据库
- 3.操作数据库
- 操作前的准备工作
- 增加文档
- 查询文档
- 更新文档
- 删除文档
- 3.将增删查改操作写成接口
- 总结
前言
前面我们已经学会怎么去在命令行里操作数据库了,但是我们肯定不能让用户去操作命令行吧。现在我们就来学习一下怎么使用mongoose在express中操作mongoDB并编写出可用接口!
一、Mongoose是什么?
- Mongoose就是一个我们可以通过Node来操作MongoDB的模块。
- Mongoose是一个对象文档库,它对Node原生的MongoDB模块进行了进一步的优化封装,并提供了更多的功能。
- 大多数情况下,它被用来把结构化的模式应用到一个MongoDB集合,并提供了验证和类型转换等好处。
二、使用步骤
1.引入库
// 下载安装mongoose
npm i mongoose --save
// 在项目中引入mongoose
const mongoose = require('mongoose');
2.连接数据库
// 连接数据库(端口号为默认的27017可不写)
mongoose.connect('mongodb://数据库的ip地址:端口号/数据库名')
根据提示,我们了解到后面还需添加参数,否则会报错(不影响)
mongoose.connect('mongodb://localhost/test',{ useNewUrlParser: true,useUnifiedTopology: true })
// 监听数据库的连接成功回调
mongoose.connection.once('open',() => {
console.log('数据库连接成功');
})
// 监听数据库的断开回调
mongoose.connection.once('close',() => {
console.log('数据库断开成功');
})
// 断开数据库(一般不需要断开)
mongoose.disconnect()
3.操作数据库
操作前的准备工作
创建约束表:
const Schema = mongoose.Schema
// 创建一个student模式对象
const student = new Schema({
name:String,
age:Number,
sex:{
type:String,
default:'男'
},
address:String
})
可以直接定义类型,或用对象的形式定义类型和默认值
使用schema来创建model
// mongoose.model(映射的集合名,约束表)
const stuModel = mongoose.model('stus',student)
model代表是数据库中的集合,通过model才能对数据库进行操作。
增加文档
// 用来增加一个文档并添加到数据库里,可以传一个或多个对象,多个用数组表示
model.create(约束表对象,回调函数)
让我们来试一试
stuModel.create({
name:'小明',
age:12,
sex:'男',
address:'东土大唐'
},err => {
if (!err) {
console.log('插入成功');
}
})
结果:
注意:操作会将自动创建的集合名变为复数形式。
查询文档
// 投影为一个对象,里面设置需要投影的值,需要设置为1,_id会自带,不想要需设置为0
model.find(查询条件,投影,查询选项(skip,limit),回调函数(必须))
让我们来试一试:
stuModel.find({
sex:'男'
},(err,data) => {
if(!err) {
console.log(data);
}
})
结果:
可以看到我们已经查询到了相应数据。
注意:data一定会返回一个数组,如查询不到则返回空数组
试一试加投影:
stuModel.find({
sex:'男'
},{
name:1,
_id:0
},(err,data) => {
if(!err) {
console.log(data);
}
})
结果:
model.findOne():用法一样,只返回第一个符合的查询对象
model.findById():查询条件为_id,其余用法一样
更新文档
model.updateOne(查询条件,修改后对象,查询选项(skip,limit),回调函数(必须))
model.updateMany(查询条件,修改后对象,查询选项(skip,limit),回调函数(必须))
让我们来试一试:
stuModel.updateMany({sex:'男'},{$set:{name:'冷锋'}},(err,data) => {
if(!err) {
console.log(data);
}
})
结果:
可以看到已经修改成功啦
删除文档
model.deleteOne(查询条件,回调函数(必须))
model.deleteMany(查询条件,回调函数(必须))
让我们来试一试:
stuModel.deleteOne({sex:'男'},(err,data) => {
if(!err) {
console.log(data);
}
})
结果:
看到已经删除成功咯
3.将增删查改操作写成接口
刚刚我们已经知道了怎么在node里面操作数据库,现在我们将他们与express结合起来暴露出接口吧!
const express = require('express');
const app = express()
//引入中间件
const bodyParser = require('body-parser')
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test',{ useNewUrlParser: true,useUnifiedTopology: true })
mongoose.connection.once('open',() => {
console.log('数据库连接成功');
})
const Schema = mongoose.Schema
// 创建一个student模式对象
const student = new Schema({
name:String,
age:Number,
sex:{
type:String,
default:'男'
},
address:String
})
const stuModel = mongoose.model('stus',student)
// 请求体解析中间件
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// 增加
app.get('/add',(req,res) => {
stuModel.create(req.body,(err,data) => {
if(!err) {
res.send('创建成功')
}
})
})
// 删除
app.get('/delete',(req,res) => {
stuModel.deleteMany(req.body,(err,data) => {
if(!err) {
res.send('删除成功')
}
})
})
// 查询
app.get('/search',(req,res) => {
stuModel.find(req.body,(err,data) => {
if(!err) {
res.send(data)
}
})
})
// 查询
app.get('/update',(req,res) => {
stuModel.updateMany(req.body,{$set:{age:100}},(err,data) => {
if(!err) {
res.send(data)
}
})
})
app.listen(3000,() => {
console.log(`端口3000已开放监听,请求地址localhost:3000`);
})
让我们分别测试下几个接口吧!
增加:
可以看到我们的数据库是能查到的。
查询:
可以看到查询成功
修改:
可以看到我们的age已经被修改为100了
删除:
可以看到我们的数据已经被清除掉了
总结
以上就是今天要讲的内容,本文仅仅简单介绍了mongoose的使用,以及mongoDB配合express使用的方法,更多的还需要同学们自己去实验