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)的更多相关文章

  1. MongoDb 快速入门教程

    文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...

  2. MongoDB快速入门教程 (3.2)

    3.2.索引 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,建立索引,通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条 ...

  3. MongoDB快速入门教程 (4.3)

    4.3.Mongoose模块化 4.3.1.为什么要进行模块化拆分? 模块化拆分的目的是为了代码的复用,让整个项目的结构更加清晰,举个例子:当数据库中的集合变多的时候,例如有课程.订单.分类.教师等多 ...

  4. MongoDB快速入门教程 (4.2)

    4.2.Mongoose实现增删查改 中文文档地址: https://cn.mongoosedoc.top/docs/guide.html 4.2.1.Mongoose是什么? Mongoose是Mo ...

  5. MongoDB快速入门教程 (4.1)

    4.Mongoose使用 4.1.nodejs操作mongodb 文档地址:http://mongodb.github.io/node-mongodb-native/3.2/tutorials/cru ...

  6. MongoDB快速入门教程 (3.3)

    3.4.聚合 3.4.1.什么是聚合? MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*) 例如上图 ...

  7. MongoDB快速入门教程(3.1)

    3.MongoDB进阶 3.1.权限验证 以下内容适用于Mac系统用户,window系统用户请看后面文档 3.1.1.创建超级管理员用户 默认情况下连接mongodb是不需要用户名和密码的,这样不安全 ...

  8. MongoDB快速入门教程 (2)

    2.MongoDB的基本的CRUD操作 2.1.创建文档 在具体操作之前,想要知道有多少数据库,可以执行下面命令 show dbs 在mongodb中,数据库中包含的叫做集合(表),集合中存储的内容叫 ...

  9. MongoDB快速入门教程 (1)

    1.MongoDB初识 1.1.MongoDB是什么? MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于 ...

随机推荐

  1. 从按下url到显示页面

    从按下url到渲染页面流程图 处理输入信息 检查用户输入 当用户在地址栏中输入一个查询关键字时,地址栏会判断输入的关键字是搜索内容,还是请求的 URL.如果是搜索内容,地址栏会使用浏览器默认的搜索引擎 ...

  2. Java实现 LeetCode 648 单词替换(字典树)

    648. 单词替换 在英语中,我们有一个叫做 词根(root)的概念,它可以跟着其他一些词组成另一个较长的单词--我们称这个词为 继承词(successor).例如,词根an,跟随着单词 other( ...

  3. Java实现 LeetCode 461 汉明距离

    461. 汉明距离 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目. 给出两个整数 x 和 y,计算它们之间的汉明距离. 注意: 0 ≤ x, y < 231. 示例: 输入 ...

  4. Java实现 蓝桥杯VIP 基础练习 回形取数

    问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...

  5. shell中文本内容多行变一行的技巧

    在linux下有时可能需要将多行的值转成一行.其实现的方法有很多种.笔者将自己曾经用过的方法在些分享. 如有一文本文件5201351.txt,文本的内容如下: 现我们可以通过如下方法将文本内容转成一行 ...

  6. iOS-自定义Model转场动画-仿酷我音乐播放器效果

    周末,闲来无事,仿写了酷我音乐播放器效果: 效果图如下: 实现思路: 1.实现手势处理视图旋转 2.自定义Model动画: 1.手势是利用了一个UIPanGestureRecognizer手势: 注意 ...

  7. 源码分析(2)-LinkedHashMap(JDK1.8)

    1.概述 LinkedHashMap继承自HashMap:在HashMap基础上,通过维护一条双向链表,解决了HashMap键值对遍历顺序和插入顺序一致的问题. 想了解LinkedHashMap源码, ...

  8. python3 源码阅读-虚拟机运行原理

    阅读源码版本python 3.8.3 参考书籍<<Python源码剖析>> 参考书籍<<Python学习手册 第4版>> 官网文档目录介绍 Doc目录主 ...

  9. 2.使用nexus3配置docker私有仓库

    1,配置走起 1,创建blob存储 登陆之后,先创建一个用于存储镜像的空间. 定义一个name,下边的内容会自动补全. 然后保存. 注意:实际生产中使用,建议服务器存储500G或以上. 2,创建一个h ...

  10. Nice Jquery Validator 快速上手

    (1).直接引用 一行代码引入插件,local 参数用来加载对应的配置文件.如果不传 local 参数,配置以及样式就需要自行引入. <script src="path/to/nice ...