为什么要使用mongoose:
mongodb数据格式过于灵活(不够规范),可以插入任何数据,不受限制;实际项目开发时,要有数据格式的规范(重要),特别是多人协作开发时。
而mongoose可以提供规范:Schema定义数据格式的规范;以Model规范Collection;规范数据操作的API.
使用npm安装mongoose:npm i mongoose
演示koa2中使用mongoose对数据进行增删改查:
1)安装 mongoose:
2)新建db.js文件,mongoose连接数据库:
// 新建db文件夹,并新建db.js文件
// 此文件的操作:连接数据库(MongoDB的服务端)
// 获取mongoose插件
const mongoose = require('mongoose')
// 获取本地启动的mongodb 服务器的地址
const url = 'mongodb://localhost:27017'
// 获取datebase
const dbName = 'comment2'
// 设置mongoose的一些必要配置
// 如果使用的mongoose的版本比较高,如6.x版本,则不需要写这些配置
// mongoose.set('useCreateIndex', true)
// mongoose.set('useFindAndModify', true)
// 连接数据库
// 第一个参数是一个完整的地址,第二个参数是必要配置
mongoose.connect(`${url}/${dbName}`,{
useNewUrlParser: true,
useUnifiedTopology: true
})
const conn = mongoose.connection
conn.on('error', err => {
console.error('mongoose 连接出错', err)
})
// 导出
module.exports = mongoose
3)新建model.js文件,使用model规范数据格式:
// 新建model.js文件,来规范数据格式
// 数据模型(规范数据格式)
// 获取mongoose
const mongoose = require('./db')
// 定义Schema (数据规范)
const UserSchema = mongoose.Schema({
username: {
type: String,
require: true,//必须有
unique: true //唯一,不重复
},
password: String,
age: Number,
city: String,
// 性别
gender: {
type: Number,
default: 0 //0-保密,1男,2女
}
},{
timestamps: true //时间戳,自动添加文档的创建时间等
})
// 定义model
const User = mongoose.model('user', UserSchema)
module.exports = {
User
}
4)新建test1.js文件使用mongoose进行增删改查:
// 新建test1.js文件使用mongoose进行增删改查
const {User} = require('./model')
// 使用async...await的方式
// 定义一个async的匿名函数,并执行。(为了里面能用await)
!(async () => {
// // 新增数据: 方式1
// const zhangsan = new User({
// username: 'zhangsan',
// password: 'abc',
// age:'18',
// city:'beijing',
// gender: 1
// })
// zhangsan.save()
// // 新增数据:方式2
// const lisi = await User.create({
// username:'lisi',
// password: '12a',
// age: 20,
// city: 'shanghai',
// })
// // 查询列表数据
// const userList = await User.find({username: 'zhangsan'}) //返回的是数组
// // 排序
// const userList = await User.find().sort({age: 1}) //返回的是数组
// console.log("排序结果:", userList)
// // 查询单条数据
// const user = await User.findOne({username: 'lisi'}) //返回的是对象
// console.log("查询单条数据结果:", user)
// // 更新
// const updateResult = await User.findOneAndUpdate(
// {username: 'zhangsan'}, //更新条件
// {city: 'changsha'}, //更新内容
// {new: true} //返回更新后的数据
// )
// console.log("更新返回结果:", updateResult)
// 删除
const removeResult = await User.remove(
{username: 'zhangsan'} //条件
)
console.log('删除后的结果:', removeResult)
//命令行发出警告,remove不推荐使用,使用deleteOne, deleteMany, bulkWrite代替
})()