• MongoDB快速入门教程 (4.4)


    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
        }
      }
    })
    

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

    解决方案:

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

    mongoose.connect('mongodb://testadmin:nodeing123@127.0.0.1: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.内置校验参数

    以下是用于数据校验的各种参数

    举个例子:

    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参数,那么就会报下面的错误

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

    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位,因此,会报如下错误:

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

  • 相关阅读:
    js 平坦化控制流
    js变量名混淆
    ERR_CERT_INVALID
    ERR_CERT_AUTHORITY_INVALID
    @babel/preset-env
    @babel/plugin-transform-runtime
    terminal
    @babel/plugin-proposal-class-properties
    Zotero
    随记 日后整理
  • 原文地址:https://www.cnblogs.com/dadifeihong/p/12048464.html
Copyright © 2020-2023  润新知