MongoDB快速入门教程 (4.4)

fangxiaoji 2019-12-16

4.5.Mongoose索引和方法

4.5.1.设置索引

let UserSchema = mongoose.Schema({
  sn: {
    type: Number,
    // 设置唯一索引
    unique: true
  },
  name: {
    type: String,
    // 设置普通索引
    index: true
  },
  age: Number,
  status: Number,
  gender: {
    type: String,
    trim: true,
    default: '男'
  },
  pic: {
    type: String,
    set (params) {
      if (params.indexOf('http://') != 0 || params.indexOf('https://') !=0 ) {
        return "http://"+params
      }
      return params
    }
  }
})

注意:如果控制台出现下面的警告

MongoDB快速入门教程 (4.4)

解决方案:

在连接数据库的时候加上配置项

mongoose.connect('mongodb://testadmin::27017/test', {
  useNewUrlParser: true,
  // 使用createIndexes来创建索引
  useCreateIndex: true
}, (err) => {
  if (err) {
    console.log(err)
    return
  }
  console.log('数据库连接成功')
})

4.5.2.内置方法

文档地址:https://mongoosejs.com/docs/queries.html

这些内置的方法我们其实已经在前面增删查改中使用过一些,这里不再举例

4.5.3.扩展静态方法

静态方法的特点是不需要实例化就可以直接调用的

1.在Schema上定义方法

let mongoose = require('./db')
// 3.定义Schema,例如:现在需要操作user集合(表),我们就需要给这个集合定义一个对应的Schema

let UserSchema = mongoose.Schema({
  sn: {
    type: Number,
    // 设置唯一索引
    unique: true,
    index: true
  },
  name: {
    type: String,
    // 设置普通索引
    index: true
  },
  age: Number,
  status: Number,
  gender: {
    type: String,
    trim: true,
    default: '男'
  },
  pic: {
    type: String,
    set (params) {
      if (params.indexOf('http://') != 0 || params.indexOf('https://') !=0 ) {
        return "http://"+params
      }
      return params
    }
  }
})

UserSchema.statics.findBySn =  function(sn, cb){
  this.find({"sn": sn}, (err, result) => {
    cb(err, result)
  })
}

// 4.创建模型

let User = mongoose.model('User', UserSchema)



module.exports = User

2.调用方法

let UserModel = require('./model/users')
UserModel.findBySn("1001", (err, result) => {
  console.log(result)
})

4.6.Mongoose数据校验

做数据校验的目的就是保证添加到数据库中的数据的合法性

4.6.1.内置校验参数

以下是用于数据校验的各种参数
MongoDB快速入门教程 (4.4)

举个例子:

let UserSchema = mongoose.Schema({
  sn: {
    type: Number,
    max: 1002
  },
  name: {
    type: String,
  },
  age: Number,
  status: Number,
  gender: {
    type: String,
    trim: true,
    required: true
  },
  pic: {
    type: String,
    set (params) {
      if (params.indexOf('http://') != 0 || params.indexOf('https://') !=0 ) {
        return "http://"+params
      }
      return params
    }
  }
})

增加数据:

let UserModel = require('./model/users')

// 增加数据
let UserObj = new UserModel({
  sn: 1001,
  name: 'nodeing',
  age: 28,
  status: 0,
  pic: "www.baidu.com"
})
UserObj.save()

注意:上面增加数据的时候,gender没有传,但是定义Schema的时候,又加了required参数,那么就会报下面的错误

MongoDB快速入门教程 (4.4)

从上面的例子我们可以看出,这些校验参数的作用实际上就是在规定数据的合法性的,不符合的数据不能存入数据库

4.6.2.自定义验证器

自定义验证器是通过配置validate参数实现的,请注意看下面代码中的sn

let mongoose = require('./db')
// 3.定义Schema,例如:现在需要操作user集合(表),我们就需要给这个集合定义一个对应的Schema

let UserSchema = mongoose.Schema({
  sn: {
    type: String,
    validate: (sn) => {
      // 返回true表示验证通过 返回false表示验证失败
      return sn.length > 5
    }
  },
  name: {
    type: String,
  },
  age: Number,
  status: Number,
  gender: {
    type: String,
    trim: true,
    required: true
  },
  pic: {
    type: String,
    set (params) {
      if (params.indexOf('http://') != 0 || params.indexOf('https://') !=0 ) {
        return "http://"+params
      }
      return params
    }
  }
})

// 4.创建模型

let User = mongoose.model('User', UserSchema)



module.exports = User

增加数据如下:

let UserModel = require('./model/users')

// 增加数据
let UserObj = new UserModel({
  sn: "1001",
  name: 'nodeing',
  age: 28,
  status: 0,
  gender: '男',
  pic: "www.baidu.com"
})
UserObj.save()

注意:由于自定义验证器需要sn的长度大于5,增加的数据中sn只有4位,因此,会报如下错误:
MongoDB快速入门教程 (4.4)

螺钉课堂视频课程地址:http://edu.nodeing.com

相关推荐