五:API略讲
以下用的查询条件解释:
$and: {a: 5} // AND 连接: (a = 5) $or: [{a: 5}, {a: 6}] // OR 或者(a = 5 OR a = 6) $gt: 6, // 大于 id > 6 $gte: 6, // 大于等于 id >= 6 $lt: 10, // 小于 id < 10 $lte: 10, // 小于等于 id <= 10 $ne: 20, // 不等于 id != 20 $between: [6, 10], // 中间值 BETWEEN 6 AND 10 $notBetween: [11, 15], // 中间值排除 NOT BETWEEN 11 AND 15 $in: [1, 2], // 单值数组 IN [1, 2] $notIn: [1, 2], // 不在数组中 NOT IN [1, 2] $like: '%hat', // 模糊匹配 LIKE '%hat' $notLike: '%hat' // 模糊匹配的反向 NOT LIKE '%hat' $iLike: '%hat' // PG的模糊 ILIKE '%hat' (case insensitive) (PG only) $notILike: '%hat' // PG的迷糊反向 NOT ILIKE '%hat' (PG only) $overlap: [1, 2] // PG的操作 && [1, 2] (PG array overlap operator) $contains: [1, 2] // PG的操作 @> [1, 2] (PG array contains operator) $contained: [1, 2] // PG的操作 <@ [1, 2] (PG array contained by operator) $any: [2,3] // PG的操作 ANY ARRAY[2, 3]::INTEGER (PG only)
用的查询方法参数opts解释
Model.findAll({ where: { //条件判断 attr0: 5, //等值判断 attr1: { $gt: 50 //条件比较 }, }, attributes:["attr1"], //返回的字段 order:["id","desc"], //排序 limit:10, //返回个数,分页用到 offset:0, //起始位置,分页用到 paranoid:false, //是否返回虚拟删除的记录 include:[{ //多表查询使用到的另外一个表 model:model, //表对象 as:"asl", //别名 where:{}, //条件 attributes:[], //返回的属性 }], logging:false, //日志,用于打印 })
具体使用:
Sequelize的API基本覆盖了常用的使用方式,其中单表查询常用的有以下几种。复杂的可以参考更多的API。
1、查询多条 findAll(opts) 或者 all(opts)
查询用的参数普遍通用,只有部分API的有特殊参数。这里展示一次常用参数,下面就略过了。
let list = await model.findAll({ where:{ id:{$gt:10},//id大于10的 name:"test" //name等于test }, order:[ "id", //根据id排序 ["id","desc"]//根据id倒序 ], limit:10,//返回个数 offset:20,//起始位置,跳过数量 attributes:["attr1","attr2"], //返回的字段 }); //select attr1,attr2 from model where ......
2、通过id查询 findById(id,opts)
这里默认数据的主键是id,查询的时候直接通过id查询数据。这里推荐在新建数据库的时候可以添加id作为唯一主键。
let model = await model.findById(12); //select a,b,c from model where id=12;
3、查询一条记录 findOne(opts)
根据条件查询记录,这里的条件一定要填写,不然就是返回第一条数据了。
let model = await model.findOne({ where:{id:12} }); //select a,b,c from model where id=12;
4、分页查询 findAndCount(opts) 或者 findAndCountAll
分页查询恐怕是另外一个常用方法了。任何一个列表都有需要分页的时候。
这个方法会同时执行2个语句。
let data = await model.findAndCount({ limit:10,//每页10条 offset:0*10,//第x页*每页个数 where:{} }); let list = data.rows; let count = data.count; //select count(*) from model where ...; //select a,b,c from model where .... limit 0,10;
5、添加新数据 create(model,opts)
添加就非常的自在了。简单的只需要传入model对象即可。这里要保证model对象的属性和字段名要一致。如果不一致就会出错。也可以传入配置参数来增加条件等。
let model= { name:"test", token:"adwadfv2324" } await model.create(model); //insert into model (name,token) values("test","adwadfv2324");
6、查询,不存在就返回默认对象 findOrInitialize(opts)
opts.default 默认值对象
这个方法首先会查询数据库,如果没有结果就会返回参数中的default对象。这个比较适合返回默认对象之类的场景
7、查询,不存在就新建一个 findOrCreate(opts)或者findCreateFind
这个方法用到的情况也比较多。通常用于自动创建不存在的数据。直接就返回了默认值。
8、有则更新,无则添加 upsert(model,opts) 或者 insertOrUpdate(model,opts)
根据主键或者唯一约束键匹配
常用于编辑的时候添加或者更新统一操作。
9、更新记录 update(model,opts)
就是最常用的更新方法,可以传入要更新的model对象,同时用配置参数有条件的区别要更新的对象。
10、删除记录 destroy(opts)
删除有2种情况,一种是物理删除。删除就从表中不存在了。另外一种就是设置paranoid,这个是虚拟删除,默认一个字段表示数据是否删除,查询的时候去掉这个条件即可查询到删除的数据。
11、恢复记录 restore(opts)
恢复多个实例,当启用paranoid时就可以使用这个方法将曾今删除的数据恢复了。
其他常用API
- 指定字段查询最大值 max("id",opts)
- 指定字段查询最小值 min("id",opts)
- 求和 sum("id",opts)
- 批量添加 bulkCreate([model],opts)
- 查表结构的信息 describe()
- 递增 increment("id",{by:1})
- 递减 decrement("id",{by:1})
- 统计查询个数 count(opts)
count
- 统计数据库中的元素数
count可以统计数据库中的元素数: Project.count().then(function(c) { console.log("There are " + c + " projects!") }) Project.count({ where: ["id > ?", 25] }).then(function(c) { console.log("There are " + c + " projects with an id greater than 25.") })
max
- 查找指定表中最大值
// 数据库中有3条记录,年龄分别是 10, 5, 40 Project.max('age').then(function(max) { // 会返回 40 }) Project.max('age', { where: { age: { lt: 20 } } }).then(function(max) { // 会返回 10 })
min
- 查找指定表中最小值
// 数据库中有3条记录,年龄分别是 10, 5, 40 Project.min('age').then(function(min) { // 会返回 5 }) Project.min('age', { where: { age: { $gt: 5 } } }).then(function(min) { // 会返回 10 })
sum
- 对指定属性求和
// 数据库中有3条记录,年龄分别是 10, 5, 40 Project.sum('age').then(function(sum) { // 会返回 55 }) Project.sum('age', { where: { age: { $gt: 5 } } }).then(function(sum) { // 会返回 50 })
基础的语法差不多这些