MongoDB结合node使用

  • 我们学习数据库最终都是运用到项目当中的,且一般作用于后端,这里以node为例,结合express框架来操作mongodb数据库实现数据的增删改查操作

安装mongoose模块 官方文档

// 安装mongoose
npm i -S mongoose

//导入模块
const mongoose = require('mongoose')

//连接数据库 返回promise对象
mongoose.connect('mongodb://localhost:27017/mydb', { useNewUrlParser: true, useUnifiedTopology: true })

/*
connect方法参2在新版本需添加,否则会有警告提示

useNewUrlParser:
当前URL字符串分析器已弃用,将在将来的版本中删除。要使用新的解析器,
请将选项{usenewurlparser:true}传递给mongoclient.connect。

useUnifiedTopology:
当前服务器发现和监视引擎已弃用,将在将来的版本中删除。要使用新的服务器发现和监视引擎,
请将选项{useUnifiedTopology:true}传递给mongoclient构造函数
*/

设置限制集合类型(可以认为是将关系型数据库设置成为非关系型数据库)

/* -------------------- schema ---------------------- */
// 创建用户集合规则
const UserSchema = new mongoose.Schema({
// 字段名/域名称
name: {
// 指字域类型
type: String,
// 必填字段
required: true,
// 字段最小长度 minlength 用于字符串类型
minlength: 2
},
age: {
type: Number,
// 默认值
default:10,
// 字段最小值 min用于数字类型
min: 1
},
pwd: String,
email: String,
// 定义此字段为 字符串数组类型
hobbies: [String]
})

创建数据库模型(user,可以限制类型) 用于对应数据库中的集合(user) 操作数据库

// 参数1:model名称
// 参数2:schema名称
// 参数3:操作的数据集合 如果参数3没有填写则以 参1的复数形式为操作数据集合名称
const UserModel = mongoose.model('User', UserSchema, 'users')

// 模型curd相关方法
Model.insertMany({key:value})
Model.deleteMany({条件},err=>{})
Model.deleteOne({条件},err=>{})
Model.countDocuments({条件})
Model.find({条件},{可选字段返回:0/1},{skip:0,limit:10})
Model.findOne({条件},{可选字段返回:0/1})
Model.updateMany({条件},{$set:{key:value}},res=>{})
Model.updateOne({条件},{$set:{key:value}},res=>{})

给对应的集合插入数据

// 1. 向数据库中增加数据
app.post('/user/add',(req,res)=>{
console.log('新增的数据:',req.body);

// 调用模型向数据库集合中插入数据 insertMany 也行
userModel.create({
name:req.body.name,
age:req.body.age
}).then(data=>{
console.log("成功插入数据:", data);
// 向前端返回数据
res.send({
ok:1
})
})
})

image

给对应的集合修改数据

// 2. 向数据库中修改数据
app.post('/user/update', (req, res) => {
console.log('要修改的数据:', req.body);

// 调用模型向数据库集合中插入数据 updateMany updateOne
userModel.updateMany({ name: req.body.firstName }, {
$set: {
name: req.body.name,
age: req.body.age
}
}).then(data => {
console.log("成功修改数据:", data);
// 向前端返回数据
res.send({
ok: 2
})
})
})

image

给对应的集合删除数据

// 3. 删除数据库集合中的数据
app.post('/user/delete', (req, res) => {
console.log('要删除的数据:', req.body);

// 调用模型向数据库集合中插入数据 deleteMany deleteOne
userModel.deleteMany({
name: req.body.name,
age: req.body.age
}).then(data => {
console.log("成功删除数据:", data);
// 向前端返回数据
res.send({
ok: 3
})
})
})

image

给对应的集合查找数据

// 4. 查找数据库对应集合中的数据
app.post('/user/find', (req, res) => {
console.log('要查找的数据:', req.body);

// 调用模型向数据库集合中插入数据 find findOne
/*
只查找对应数据的age属性,并且返回第一条(只取一条)
*/
userModel.find({
name: req.body.name
}, { age: 1 }, { skip: 0, limit: 1 }).then(data => {
console.log("成功查找到数据:", data);
// 向前端返回数据
res.send({
ok: 4
})
})
})

image

完整的后端代码展示:

  • app.js
//引入express模块和mmongose模块
const express = require('express')
const mongoose = require("mongoose")
// 创建服务器
const app = express()
// 配置解析post参数的两个内置中间件
// 通过express.json()这个中间件,解析表单中的JSON格式的数据
app.use(express.json())//解析post的请求题参数(json格式)
// 通过express.urlencoded()这个中间件,来解析表单中的url-encoded格式的数据
app.use(express.urlencoded({ extended: false }))//解析post的请求题参数(encoded格式)

// 1. 连接数据库(mongodb:网口域名/数据库名)
mongoose.connect("mongodb://127.0.0.1:27017/lam_test")// 了解本机域名下的数据库

// 2. 设置限制集合类型(可以认为是将关系型数据库设置成为非关系型数据库)
const userType = { // 限制该集合只能传入以下字段以及对应的类型限制
name: String, // 限制name字段为String类型
age: Number, // 限制age字段为Number类型
}

// 3. 创建数据库模型(user,可以限制类型) 用于对应数据库中的集合(user) 操作数据库
const userModel = mongoose.model('user', new mongoose.Schema(userType))// 创建模型并传入类型限制
// 最后会在数据库中生成一个users的集合,也就是说,默认会在你生成模型名字的后面+s来生成集合

/* --------------- 接口编写 ------------------ */

// 1. 向数据库中增加数据 insertMany 也行
app.post('/user/add', (req, res) => {
console.log('新增的数据:', req.body);

// 调用模型向数据库集合中插入数据
userModel.insertMany({
name: req.body.name,
age: req.body.age
}).then(data => {
console.log("成功插入数据:", data);
// 向前端返回数据
res.send({
ok: 1
})
})
})

// 2. 向数据库中修改数据
app.post('/user/update', (req, res) => {
console.log('要修改的数据:', req.body);

// 调用模型向数据库集合中插入数据 updateMany updateOne
userModel.updateMany({ name: req.body.firstName }, {
$set: {
name: req.body.name,
age: req.body.age
}
}).then(data => {
console.log("成功修改数据:", data);
// 向前端返回数据
res.send({
ok: 2
})
})
})

// 3. 删除数据库集合中的数据
app.post('/user/delete', (req, res) => {
console.log('要删除的数据:', req.body);

// 调用模型向数据库集合中插入数据 deleteMany deleteOne
userModel.deleteMany({
name: req.body.name,
age: req.body.age
}).then(data => {
console.log("成功删除数据:", data);
// 向前端返回数据
res.send({
ok: 3
})
})
})

// 4. 查找数据库对应集合中的数据
app.post('/user/find', (req, res) => {
console.log('要查找的数据:', req.body);

// 调用模型向数据库集合中插入数据 find findOne
/*
只查找对应数据的age属性,并且返回第一条(只取一条)
*/
userModel.find({
name: req.body.name
}, { age: 1 }, { skip: 0, limit: 1 }).then(data => {
console.log("成功查找到数据:", data);
// 向前端返回数据
res.send({
ok: 4
})
})
})

// 启动服务器
app.listen(3000, () => {
console.log('服务器已启动,3000端口号正在监听...');
})