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::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
相关推荐
LuckyLXG 2020-09-08
zhushenghan 2020-08-16
lbyd0 2020-11-17
BigYellow 2020-11-16
sushuanglei 2020-11-12
我心似明月 2020-11-09
zhushenghan 2020-11-09
sunnnyduan 2020-10-16
不要皱眉 2020-10-14
xiaohai 2020-09-29
songxiugongwang 2020-09-22
萌亖 2020-09-17
sdmzhu 2020-09-01
mkhhxxttxs 2020-09-16
xiaohai 2020-09-16
newcome 2020-09-09
jaylong 2020-08-19
大秦铁骑 2020-08-19