Mongoose 索引、内置 CURD 方 法、扩展的静态方法和实例方法、数据校验
一、Mongoose 索引
索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更 快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询 优化技巧。
mongoose 中除了以前创建索引的方式,我们也可以在定义 Schema 的时候指定创建索引。
var DeviceSchema = new mongoose.Schema({
sn: {
type: Number,
// 唯一索引
unique: true
},
name: {
type: String,
// 普通索引
index: true
}
});
二、Mongoose 内置 CURD
Model.deleteMany()
Model.deleteOne()
Model.find()
Model.findById()
Model.findByIdAndDelete()
Model.findByIdAndRemove()
Model.findByIdAndUpdate()
Model.findOne()
Model.findOneAndDelete()
Model.findOneAndRemove()
Model.findOneAndReplace()
Model.findOneAndUpdate()
Model.replaceOne()
Model.updateMany()
Model.updateOne()
三、扩展 Mongoose CURD 方法
model下的user.js
var mongoose = require('./db.js');
var UserSchema = mongoose.Schema({
name: {
type: String
},
sn: {
type: String,
index: true
},
age: Number,
status: {
type: Number,
default: 1
}
})
//静态方法
UserSchema.statics.findBySn = function (sn, cb) {
//通过 find方法获取 sn的数据 this 关键字获取当前的model
this.find({
"sn": sn }, function (err, docs) {
cb(err, docs)
})
}
// 实例方法 (基本不用)
UserSchema.methods.print = function () {
console.log('我是一个实例方法')
console.log(this.name)
}
module.exports = mongoose.model('User', UserSchema, 'user');
最外层user.js
var UserModel = require('./model/user.js');
// var user = new UserModel({
// name: '赵六',
// sn:'123456781',
// age: 29
// });
// user.save();
// UserModel.findBySn('123456781',function(){})
UserModel.findBySn('123456782', function (err, docs) {
if (err) {
console.log(err);
return;
}
console.log(docs)
})
var user = new UserModel({
name: '赵六',
sn: '123456781',
age: 29
});
// user.save();
user.print(); //自定义的实例方法
四、Mongoose数据校验
1、Mongoose 校验参数
required : 表示这个数据必须传入
max: 用于 Number 类型数据,最大值
min: 用于 Number 类型数据,最小值
enum:枚举类型,要求数据必须满足枚举值
enum: [‘0’, ‘1’, ‘2’] match:增加的数据必须符合 match(正则)的规则 maxlength:最大长度
minlength:最小长度
var mongoose = require('./db.js');
//mongoose数据校验:用户通过mongoose给mongodb数据库增加数据的时候,对数据的合法性进行的验证
//mongoose里面定义Schema:字段类型,修饰符、默认参数 、数据校验都是为了数据库数据的一致性
//Schema,为数据库对象的集合,每个schema会映射到mongodb中的一个collection,定义Schema可以理解为表结构的定义
var UserSchema = mongoose.Schema({
name: {
type: String,//指定类型
trim: true, //修饰符
required: true //这个字段必须传入
},
sn: {
type: String,
index: true, //索引.
set (val) {
//自定义修饰符
return val;
},
// maxlength:20,
// minlength:10
// match:/^sn(.*)/ ,
validate: function (sn) {
return sn.length >= 10;
}
},
age: {
type: Number,
min: 0, //用在number类型上面,最小0
max: 150 //最大150
},
status: {
type: String,
default: 'success', //默认值
enum: ['success', 'error'] //status的值必须在 对应的数组里面 注意枚举是用在String
}
})
module.exports = mongoose.model('User', UserSchema, 'user');
2、Mongoose 自定义的验证器
desc: {
type: String,
// 自定义的验证器,如果通过验证返回 true,没有通过则返回 false
validate: function(desc) {
return desc.length >= 10;
}
}