[TOC]
### sequelize 查询示例
~~~
const Op = Sequelize.Op
[Op.and]: {a: 5} // 且 (a = 5)
[Op.or]: [{a: 5}, {a: 6}] // (a = 5 或 a = 6)
[Op.gt]: 6, // id > 6
[Op.gte]: 6, // id >= 6
[Op.lt]: 10, // id < 10
[Op.lte]: 10, // id <= 10
[Op.ne]: 20, // id != 20
[Op.eq]: 3, // = 3
[Op.not]: true, // 不是 TRUE
[Op.between]: [6, 10], // 在 6 和 10 之间
[Op.notBetween]: [11, 15], // 不在 11 和 15 之间
[Op.in]: [1, 2], // 在 [1, 2] 之中
[Op.notIn]: [1, 2], // 不在 [1, 2] 之中
[Op.like]: '%hat', // 包含 '%hat'
[Op.notLike]: '%hat' // 不包含 '%hat'
[Op.iLike]: '%hat' // 包含 '%hat' (不区分大小写) (仅限 PG)
[Op.notILike]: '%hat' // 不包含 '%hat' (仅限 PG)
[Op.startsWith]: 'hat' // 类似 'hat%'
[Op.endsWith]: 'hat' // 类似 '%hat'
[Op.substring]: 'hat' // 类似 '%hat%'
[Op.regexp]: '^[h|a|t]' // 匹配正则表达式/~ '^[h|a|t]' (仅限 MySQL/PG)
[Op.notRegexp]: '^[h|a|t]' // 不匹配正则表达式/!~ '^[h|a|t]' (仅限 MySQL/PG)
[Op.iRegexp]: '^[h|a|t]' // ~* '^[h|a|t]' (仅限 PG)
[Op.notIRegexp]: '^[h|a|t]' // !~* '^[h|a|t]' (仅限 PG)
[Op.like]: { [Op.any]: ['cat', 'hat']} // 包含任何数组['cat', 'hat'] - 同样适用于 iLike 和 notLike
[Op.overlap]: [1, 2] // && [1, 2] (PG数组重叠运算符)
[Op.contains]: [1, 2] // @> [1, 2] (PG数组包含运算符)
[Op.contained]: [1, 2] // <@ [1, 2] (PG数组包含于运算符)
[Op.any]: [2,3] // 任何数组[2, 3]::INTEGER (仅限PG)
[Op.col]: 'user.organization_id' // = 'user'.'organization_id', 使用数据库语言特定的列标识符, 本例使用 PG
~~~
数据表结构
| id | name | age | sex | address | math | english |
| --- | --- | --- | --- | --- | --- | --- |
| 张三 | 23 | 男 | 18 | 云南 | 60 | 40|
| 李四 | 23 | 女 | 22 | 贵州| 20 | 30|
| 王麻子 | 23 | 男 | 30| 玉溪 | 30 | 26|
| 赵六 | 23 | 女 | 26 | 德州 | 80 | 38 |
| 刘能 | 23 | 女 | 19 | 西凉 | 100| 48 |
| 段鱼 | 23 | 男 | 28 | 广州 | 60| 52|
| 琳娜 | 23 | 男 | 34 | 泰国 | 40| 46|
| 贝利 | 23 | 男 | 42 | 美国 | 50| 69 |
| 皮特 | 23 | 女 | 50 | 英国 | 38| 70 |
| 汤姆 | 23 | 男 | 46 | 缅甸 | 42| 65 |
*****
* [ ] 查询年龄 > 20 的学生
~~~
model.findAll({
attributes: ['name', 'age'],
where: {
// age > 20
age: {
[Op.gt]:20
}
}
})
~~~
*****
* [ ] 查询年龄 > 20 && < 30 的学生
~~~
model.findAll({
attributes: ['name', 'age'],
where: {
age: {
[Op.and]: {
[Op.gt]:20,
[Op.lt]:30
}
}
}
})
`student`.`age` > 20 AND `student`.`age` < 30
~~~
*****
* [ ] 查询年龄 in 28 26 52
~~~
model.findAll({
attributes: ['name', 'age'],
where: {
age: {
[Op.in]: [26,28,52]
}
}
});
`student`.`age` IN (26, 28, 52)
~~~
*****
* [ ] 查询英语成绩为null的
~~~
model.findAll({
attributes:['name','english'],
where: {
english: {
[Op.is]:null
}
}
})
`student`.`english` IS NULL
~~~
*****
* [ ] 查询英语成绩 IS NOT NULL 不为空
~~~
Student.findAll({
attributes:['name','english'],
where: {
english: {
[Op.not]:null
}
}
})
`student`.`english` IS NOT NULL
~~~
- 概述
- 起步
- 跨域配置
- 路径别名
- 路由
- api版本控制
- 错误和异常
- 全局异常处理
- 数据库
- 创建迁移文件
- sequelize数据类型
- 配置
- 新增
- 查询
- 条件查询
- 模糊查询
- 排序查询
- 聚合查询
- 分组查询
- 分页查询
- 修改
- 删除
- 获取器
- 修改器
- 静态属性
- 字段验证
- 外键约束
- 关联模型
- 一对一
- 一对多
- 左外连接
- 多对多
- 字段显示隐藏
- 事务
- 字段自增
- 验证层
- egg-validate
- indicative验证器
- egg-validate-plus
- betterValidate
- 校验规则
- 中间件
- 安全
- 数据加密
- 单向加密
- 示例代码
- 封装egg加密
- 上传
- path模块
- 单文件上传
- 多文件上传
- 按照日期存储
- 工具函数
- egg常用工具函数
- 缓存
- 配置缓存插件
- 设置缓存
- 获取缓存
- 删除缓存
- 消息队列
- rabbitMQ
- 安装
- 简单队列
- 工作队列
- 工作队列(dispach分发)
- 消息应答和持久化
- redis
- 数据类型
- 字符串类型(String)
- 哈希类型(Hash)
- 列表(List)
- 无序集合(Set)
- 可排序集合(Zset)
- 邮件系统
- nodeMailer
- 第三方模块
- 生成随机数
- JWT
- JWT鉴权
- 生成Token
- 短信服务
- 阿里大鱼短信验证码
- 发送短信逻辑
- 阿里短信Node类