前言
大家好,我是其润丿。最近在使用koa2+mongoose进行毕设制作,在最开始学习mongoose的过程中遇到了一些问题。特此写下这篇文章对mongoose的使用过程进行记录,希望能对刚学习mongoose的伙伴们提供一些学习上的帮助。
Node.js使用mongoose
下载mongoose
npm install mongoose
引入mongoose
const mongoose = require('mongoose')
连接mongodb数据库
//连接数据库
//mongoose.connect('mongodb://数据库ip:端口号/数据库名',{useMongoClient: true})
// - 端口默认27017可省略
mongoose
.connect('mongodb://127.0.0.1/Koa-Vue-GraduationDesign', { useNewUrlParser: true })
.then(() => {
console.log('MongoDB connected...')
})
.catch((err) => {
console.log(err)
})
- mongoose.connect('mongodb://数据库ip:端口号/数据库名',{useMongoClient: true})
- 本地数据库的ip一般都是127.0.0.1
- 数据库名的话是自己进行命名,没有的话在连接成功的时候数据库会自动进行创建
- 端口默认27017可省略
mongoose进行数据集合创建
定义数据模式Schema
我们可以在Schema中定义我们创建的该集合中的属性名,属性对应的类型,属性是否必填以及属性是否有初始值等信息。
Schema是mongoose里用到的一种数据模式,可以理解为表结构的定义
Schema里面的对象和数据库表里面的字段一一对应
使用实例
const mongoose = require('mongoose')
const Schema = mongoose.Schema
const UserSchema = new Schema({
// 用户名
username:{
type:String,
required:true
},
// 密码
password:{
type:String,
required:true
},
// 用户本人姓名
fullname:{
type:String,
required:true
},
// 年龄
age:{
type:Number,
default:''
},
// 地址
address:{
type:Array,
default:[]
},
// 手机号
phone:{
type:String,
required:true
},
// 用户留言
message:{
type:String,
default:""
},
// 性别
sex:{
type:String,
default:"woman"
},
// 购物车清单
shoppingCart:{
type:Array,
default:[]
},
// 已购买商品清单
purchasedGoods:{
type:Array,
default:[]
},
// 注册时间
registrationTime:{
type: Date,
required: true,
default: Date.now
}
})
module.exports = Users = mongoose.model('users',UserSchema)
定义数据模型Model
可以看到在上方的使用实例中,最后一行使用了mongoose.model
module.exports = Users = mongoose.model('users',UserSchema)
通过mongoose.model就可以对我们的数据库集合进行创建
- 参数1:对应数据库中集合的名称
- 首字母一般情况下大写(这里我忽视了这个情况,大家一定要首字母大写)
- 默认会操作数据库中参数值复数形式的collection集合
- 参数2:集合对应我们创建的Schema的名称
- 参数3:表示实际操作的collection,不采用参数1的默认操作对象,可不传(我没有传)
注意点: 这里我直接通过module.exports对Users进行了导出,目的是为了在后续api的创建时可以对该集合进行引入。
在接口中使用定义好的数据集合
以上方展示的使用实例进行继续延伸
对数据模块进行引入
该数据模块就是我们上方通过module.exports导出的Users数据模块
// 引入Users数据库模块
const Users = require('../../models/Users')
具体使用
/**
* @route POST api/users/delete
* @description 删除用户信息接口
* @access 接口公开
*/
usersRouter.post('/delete',async (ctx) =>{
const _id = ctx.request.body.id
// 操作数据库,用户信息
const data = await Users.findOne({
_id
})
if(!data){
ctx.status = 403
ctx.body = {
status:ctx.status,
msg:'该用户不存在!',
success:false
}
}else{
await Users.remove({_id})
ctx.status = 200
ctx.body = {
status:ctx.status,
msg:'用户删除成功!',
success:true,
}
}
})
- 在接口中实际上就是根据mongoose自带的api,对我们调用的数据集合进行指定的一些操作
- Users.findOne() 根据传进去的参数进行条件查找,返回满足条件的第一条数据,这里的话是对传过来的用户id进行条件查找。
- Users.remove() 根据传进去的参数进行条件查找,删除满足条件的第一条数据。同理这里根据传过来的用户id进行条件查找,从而进行删除。
- 最后在进行一系列操作后,通过ctx.body向前端返回对应的数据以及提示
注意: 在使用mongoose自带的api时,一定要在前方写上await,对应的在函数形参前写上async。这样才是真实的数据
// 操作数据库,用户信息
const data = await Users.findOne({ _id })
结尾
mongodb数据库对我们前端来说是一个很友好的数据库,相对于mysql来说。用mongoose来操作mongodb数据库能减少很多我们学习的成本,并且写法也与前端中的函数写法十分相似。这也是我在做毕设时使用mongoose的原因。
在学习过程中或多或少的也出现了一些问题,想到了大家可能也会有和我一样的问题,于是写下了这篇文章来供大家学习。希望能帮助到大家的学习,如果文章中出现了一些错误也欢迎大家指出,不足之处也大家请多多包涵与谅解。