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 快速入门教程
文章首发于[博客园-陈树义],点击跳转到原文MongoDb 快速入门教程. MongoDb 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的. 它是可扩展的 ...
- MongoDB快速入门教程 (3.2)
3.2.索引 索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,建立索引,通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条 ...
- MongoDB快速入门教程 (4.3)
4.3.Mongoose模块化 4.3.1.为什么要进行模块化拆分? 模块化拆分的目的是为了代码的复用,让整个项目的结构更加清晰,举个例子:当数据库中的集合变多的时候,例如有课程.订单.分类.教师等多 ...
- MongoDB快速入门教程 (4.2)
4.2.Mongoose实现增删查改 中文文档地址: https://cn.mongoosedoc.top/docs/guide.html 4.2.1.Mongoose是什么? Mongoose是Mo ...
- MongoDB快速入门教程 (4.1)
4.Mongoose使用 4.1.nodejs操作mongodb 文档地址:http://mongodb.github.io/node-mongodb-native/3.2/tutorials/cru ...
- MongoDB快速入门教程 (3.3)
3.4.聚合 3.4.1.什么是聚合? MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果.有点类似sql语句中的 count(*) 例如上图 ...
- MongoDB快速入门教程(3.1)
3.MongoDB进阶 3.1.权限验证 以下内容适用于Mac系统用户,window系统用户请看后面文档 3.1.1.创建超级管理员用户 默认情况下连接mongodb是不需要用户名和密码的,这样不安全 ...
- MongoDB快速入门教程 (2)
2.MongoDB的基本的CRUD操作 2.1.创建文档 在具体操作之前,想要知道有多少数据库,可以执行下面命令 show dbs 在mongodb中,数据库中包含的叫做集合(表),集合中存储的内容叫 ...
- MongoDB快速入门教程 (1)
1.MongoDB初识 1.1.MongoDB是什么? MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于 ...
随机推荐
- brpc长连接问题
问题: 使用了brpc的长连接,但是为何耗时和短链接一样呢? brpc文档里介绍,使用http协议,则默认使用pooled,只要连接数不超过max_connection_pool_size,则都可以使 ...
- Java实现 LeetCode 98 验证二叉搜索树
98. 验证二叉搜索树 给定一个二叉树,判断其是否是一个有效的二叉搜索树. 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数. 节点的右子树只包含大于当前节点的数. 所有左子树和右 ...
- Linux脚本安装包
脚本安装包 并不是独立的软件安装包类型,常见安装的是源码包,是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简答的参数,就可以实现安装,非常类似于Windows下软件的安装方式. 安装过程(安 ...
- springboot集成mybatis(逆向工程),热部署以及整合Swagger2
本文是作者原创,版权归作者所有.若要转载,请注明出处. springboot集成mybatis和mybatis-generator插件 1.新建Springboot项目(略) 2.导入相关依赖 < ...
- CSS清除浮动&内容居中&文字溢出
学习! 1.CSS清除浮动的方法 (1)添加标签清除浮动: 在浮动元素结尾处,并列的添加标签<div style="clear:both;"></div>. ...
- 彻底搞懂 etcd 系列文章(三):etcd 集群运维部署
0 专辑概述 etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管.etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key-value 存储的中间件 ...
- MySQL 8.0二进制包安装
1.官方下载 https://dev.mysql.com/downloads/mysql/ 这样就可以下载二进制包了 1.删除之前安装的MySQL包 [root@localhost ~]# rpm - ...
- Centos6,Centos7防火墙设置与端口开放的方法
Centos升级到7之后,内置的防火墙已经从iptables变成了firewalld.端口的开启还是要从两种情况来说明的,即iptables和firewalld. 一.iptables 1.打开/关闭 ...
- Netty中的这些知识点,你需要知道!
一.Channel Channel是一个接口,而且是一个很大的接口,我们称之为“大而全”,囊括了server端及client端接口所需要的接口. Channel是一个门面,封装了包括网络I/O及相关的 ...
- Ray射线检测和Recources.Load
记录射线检测常用的方法,以及Rocources.Load的常用用法 使用代码实现鼠标点击在鼠标点击处生成制定gameObject RayCastHit hit; void Update() { Ray ...