这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战
前言
我们经常做项目要使用数据库,上一篇文章就使用到了。今天我们来具体讲一讲使用Mongoose操作数据库,主要涉及到的是Mongoose的索引,mongoose的方以及mongoose的预定义模式修饰符。
一、Mongoose 索引
索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更
快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询
优化技巧。
mongoose 中除了以前创建索引的方式,我们也可以在定义 Schema 的时候指定创建索引。 这里的schema十分重要,后面是通过moodel操作数据库。
var DeviceSchema = new mongoose.Schema({
sn: {
type: Number,
// 唯一索引
unique: true
},
name: {
type: String,
// 普通索引
index: true
}
});
二、Mongoose 内置 CURD
来源:mongoosejs.com/docs/querie…
Model.deleteMany()
Model.deleteOne()
Model.find()
Model.findById()
Model.findByIdAndDelete()
Model.findByIdAndRemove()
Model.findByIdAndUpdate()
Model.findOne()
Model.findOneAndDelete()
Model.findOneAndRemove()
Model.findOneAndUpdate()
Model.replaceOne()
Model.updateMany()
Model.updateOne()
这里用的比较多的方法是Model.deleteOne(),Model.find(),Model.updateOne() ,Model.delete(),也就是我们说的删,查,找。
三、扩展 Mongoose CURD 方法
这里重点讲的是增加数据,利用实例模型,
var newuser = new ManagerModel({
"username": username,
"password": md5(password),
"email": email })
newuser.save()
通过这个实例的方法来增加数据,这也是基本操作的增删改查最不一样的地方。 我们下面也举一个Mongoose CURD 方法例子
var mongoose=require('./db.js');
var UserSchema=mongoose.Schema({
name:{
type:String
},
age:Number,status:{
type:Number,
default:1
}
})
// 静态方法
UserSchema.statics.findByUid=function(uid,cb){
this.find({"_id":uid},function(err,docs){
cb(err,docs)
})
}
// 实例方法
UserSchema.methods.print = function(){
console.log('这是一个实例方法');
console.log(this);
};
module.exports=mongoose.model('User',UserSchema,'user');
四、mongoose 预定义模式修饰符
修饰符:lowercase、uppercase 、trim
mongoose 提供的预定义模式修饰符,可以对我们增加的数据进行一些格式化。
五、Mongoose Getters 与 Setters 自定义修饰符
我们经常也用到Set和get来对数据进行格式化。
除了 mongoose 内置的修饰符以外,我们还可以通过 set(建议使用) 修饰符在增加数据的 时候对数据进行格式化。也可以通过 get(不建议使用)在实例获取数据的时候对数据进行格式化。 下面我举一个例子:
var UserSchema=mongoose.Schema({
name:{
type:String,
trim:true
},
age:Number,
status:{
type:Number,
default:1
}
})//格式化。
var NewsSchema=mongoose.Schema({
title:"string",
author:String,
pic:String,
redirect:{
type:String,
set(url){
if(!url) return url;
if(url.indexOf('http://')!=0 && url.indexOf('https://')!=0){
url = 'http://' + url;
}
return url;
}
},
content:String,
status:{
type:Number,
default:1
}
})
var NewsSchema=mongoose.Schema({
title:"string",
author:String,
pic:String,
redirect:{
type:String,
set(url){
if(!url) return url;
if(url.indexOf('http://')!=0 && url.indexOf('https://')!=0){
url = 'http://' + url;}
return url;
},
get: function(url){
if(!url) return url;
if(url.indexOf('http://')!=0 && url.indexOf('https://')!=0){
url = 'http://' + url;
}
return url;
}
},
content:String,
status:{
type:Number,
default:1
}
})
这里的set是比较推荐的,在增加的数据进行格式化,就好像筛选数据时候的正则一样,拿到想要的数据。
总结
使用mongoose操作数据库还是比较便捷的,毕竟已经给您封装好了,但是大家要是有需求,可以自己手写一下使用node操作数据库,巩固一下自己的知识。还是那句话,一步步来,加油!