使用mongoose操作mongodb

208 阅读3分钟

这是我参与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操作数据库,巩固一下自己的知识。还是那句话,一步步来,加油!