mongoose 入门(三)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; 
	} 
}

猜你喜欢

转载自blog.csdn.net/qq_41880073/article/details/122897015