一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据库的接口。
配置mongoose
链接mongoDB,这里我使用的是mongoDB Atlas免费服务。
const mongoose=require("mongoose");
const {connectionStr}=require("./config");
mongoose.connect(connectionStr,{ useNewUrlParser: true,useUnifiedTopology: true },()=>{
console.log("数据库链接成功");
});
mongoose.connection.on(`error`,console.error);
mongoose.set('useFindAndModify', false);
把数据库链接String放到config配置文件中去了。
创建Schema和model
Schema是一个骨架,里面定义着数据类型。
const mongoose=require("mongoose");
const {Schema,model}=mongoose;
const userSchema=new Schema({
name:{type: String,required:true}, //默认require也是true
age:{type: Number,required: false}
})
module.exports=model('User',userSchema); //模型的别名,模型就是模式的实例化
增删改查举例
还是很清晰的,就不一一解释了,注意数据库查询要使用异步方式,否则会阻塞进程。
const User = require("../models/users.js");
class UserRoute {
async create(ctx) {
ctx.verifyParams({
name: {type: `string`, required: true}, //默认require也是true
age: {type: `number`, required: false}
})
const user=await new User(ctx.request.body).save();
ctx.body=user;
}
async update(ctx) {
ctx.verifyParams({
name: {type: `string`, required: true}, //默认require也是true
age: {type: `number`, required: false}
})
const user=await User.findByIdAndUpdate(ctx.params.id,ctx.request.body,{new:true});
if (!user)
ctx.throw(404, "用户不存在");
ctx.body=user;
}
async deleteByid(ctx) {
const user=await User.findByIdAndRemove(ctx.params.id);
if (!user)
ctx.throw(404, "用户不存在");
ctx.status = 204;
}
async findByid(ctx) {
const user = await User.findById(ctx.params.id);
if (!user)
ctx.throw(404, "用户不存在");
ctx.body = user;
}
async getAll(ctx) {
ctx.body = await User.find();
}
}
module.exports = new UserRoute();