MongoDB快速入门教程 (4.4)

Posted 螺钉课堂Nodeing.com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于MongoDB快速入门教程 (4.4)的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB C# Driver 快速入门

如何将代码片段存储在 mongodb 中?

MongoDB快速入门教程 (4.1)

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段

我的Android进阶之旅关于Android平台获取文件的mime类型:为啥不传小写后缀名就获取不到mimeType?为啥android 4.4系统获取不到webp格式的mimeType呢?(代码片段

MongoDB快速入门教程 (4.2)