You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
$ Executing (default): SELECT `id`, `firstName`, `lastName`, `age`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`firstName` = 'jim';
上面的代码默认使用相等运算符进行比较,也可以改写成使用 Op.eq 运算符
const{ Op }=require("sequelize");User.findAll({where: {firstName: {[Op.eq]: "jim",}}});// SELECT * FROM post WHERE authorId = 2
基础运算符查询
and 查询语法糖
constj3=awaitUser.findAll({where: {firstName: "Jane",lastName: "Doe"},});console.log(JSON.stringify(j3));//Executing (default): SELECT `id`, `firstName`, `lastName`, `age`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`firstName` = 'Jane' AND `User`.`lastName` = 'Doe';
and 查询其他写法
constj4=awaitUser.findAll({where: {[Op.and]: [{firstName: "Jane"},{lastName: "Doe"}]},});//Executing (default): SELECT `id`, `firstName`, `lastName`, `age`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`firstName` = 'Jane' AND `User`.`lastName` = 'Doe';
OR查询
constj5=awaitUser.findAll({where: {[Op.or]: [{firstName: "Jane"},{firstName: "jim"}]},});console.log(JSON.stringify(j5));//Executing (default): SELECT `id`, `firstName`, `lastName`, `age`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE (`User`.`firstName` = 'Jane' OR `User`.`firstName` = 'jim');
Op.in 查询
constj6=awaitUser.findAll({where: {firstName: ["Jane","jim"]},});console.log(JSON.stringify(j6));//Executing (default): SELECT `id`, `firstName`, `lastName`, `age`, `createdAt`, `updatedAt` FROM `Users` AS `User` WHERE `User`.`firstName` IN ('Jane', 'jim');
const{ Op }=require("sequelize");Post.findAll({where: {[Op.and]: [{a: 5},{b: 6}],// (a = 5) AND (b = 6)[Op.or]: [{a: 5},{b: 6}],// (a = 5) OR (b = 6)someAttribute: {// 基本[Op.eq]: 3,// = 3[Op.ne]: 20,// != 20[Op.is]: null,// IS NULL[Op.not]: true,// IS NOT TRUE[Op.or]: [5,6],// (someAttribute = 5) OR (someAttribute = 6)// 使用方言特定的列标识符 (以下示例中使用 PG):[Op.col]: 'user.organization_id',// = "user"."organization_id"// 数字比较[Op.gt]: 6,// > 6[Op.gte]: 6,// >= 6[Op.lt]: 10,// < 10[Op.lte]: 10,// <= 10[Op.between]: [6,10],// BETWEEN 6 AND 10[Op.notBetween]: [11,15],// NOT BETWEEN 11 AND 15// 其它操作符[Op.all]: sequelize.literal('SELECT 1'),// > ALL (SELECT 1)[Op.in]: [1,2],// IN [1, 2][Op.notIn]: [1,2],// NOT IN [1, 2][Op.like]: '%hat',// LIKE '%hat'[Op.notLike]: '%hat',// NOT LIKE '%hat'[Op.startsWith]: 'hat',// LIKE 'hat%'[Op.endsWith]: 'hat',// LIKE '%hat'[Op.substring]: 'hat',// LIKE '%hat%'[Op.iLike]: '%hat',// ILIKE '%hat' (不区分大小写) (仅 PG)[Op.notILike]: '%hat',// NOT ILIKE '%hat' (仅 PG)[Op.regexp]: '^[h|a|t]',// REGEXP/~ '^[h|a|t]' (仅 MySQL/PG)[Op.notRegexp]: '^[h|a|t]',// NOT REGEXP/!~ '^[h|a|t]' (仅 MySQL/PG)[Op.iRegexp]: '^[h|a|t]',// ~* '^[h|a|t]' (仅 PG)[Op.notIRegexp]: '^[h|a|t]',// !~* '^[h|a|t]' (仅 PG)[Op.any]: [2,3],// ANY ARRAY[2, 3]::INTEGER (仅 PG)[Op.match]: Sequelize.fn('to_tsquery','fat & rat')// 匹配文本搜索字符串 'fat' 和 'rat' (仅 PG)// 在 Postgres 中, Op.like/Op.iLike/Op.notLike 可以结合 Op.any 使用:[Op.like]: {[Op.any]: ['cat','hat']}// LIKE ANY ARRAY['cat', 'hat']// 还有更多的仅限 postgres 的范围运算符,请参见下文}}});
运算符组合
运算符 Op.and, Op.or 和 Op.not 可用于创建任意复杂的嵌套逻辑比较.
使用 Op.and 和 Op.or 示例
const{ Op }=require("sequelize");Foo.findAll({where: {rank: {[Op.or]: {[Op.lt]: 1000,[Op.eq]: null}},// rank < 1000 OR rank IS NULL{createdAt: {[Op.lt]: newDate(),[Op.gt]: newDate(newDate()-24*60*60*1000)}},// createdAt < [timestamp] AND createdAt > [timestamp]{[Op.or]: [{title: {[Op.like]: 'Boat%'}},{description: {[Op.like]: '%boat%'}}]}// title LIKE 'Boat%' OR description LIKE '%boat%'}});
Sequelize 文档学习(CRUD查询篇)
Seq 提供了非常丰富的查询数据的方法,这促使我们需要花费大量精力了解它。
下面开始吧。
简单INSERT查询
下面我将使用 create 方法来创建两条数据,注意它们的区别
create 是使用
Model.build()
构建未保存实例并使用instance.save()
保存实例的语法糖,它可以使用 save 方法的部分保存功能。上面代码中,使用 Create 方法创建jim.lastName
,打出来依然是undefined
。如果使用 build 和 save 方法,则有一点不同
上面的代码中,我使用Model.build 方法构建了 lastName 和 firstName,但是并未保存lastName。数据库中自然不会处理 lastName 字段,不过record 实例对象中则依然是存在 lastName 属性的。
简单 SELECT 查询
使用 findAll 方法可以查询整张表
SELECT查询特定属性
查询特定属性时,可以用
attributes
属性在查询的时候如果希望返回的字段跟数据库的不一致,那可以使用别名,具体用法是这样的
使用聚合函数配合 group 分组
还可以排除属性
WHERE
WHERE 语句用于过滤查询,它专门配置了一些语法糖,以下是一些用例
默认相等查询
比如下面我只需要查询 firstName=jim 的数据
上面的代码默认使用相等运算符进行比较,也可以改写成使用 Op.eq 运算符
基础运算符查询
and 查询语法糖
and 查询其他写法
OR查询
Op.in 查询
两者的语句不太一样,但是查询出来的结果还是相同的
更多运算符查询
直接看官方的案例吧,用到的时候可以参考
运算符组合
运算符
Op.and
,Op.or
和Op.not
可用于创建任意复杂的嵌套逻辑比较.使用
Op.and
和Op.or
示例使用
Op.not
示例生成以下语句
UPDATE 查询
下面是简单的将 jim 改成 jim2的命令
DELETE 查询
下面是将所有 lastName 为 null 的数据删除的代码
删掉所有内容
批量创建
可以使用
Model.bulkCreate
来一次性批量创建,跟create 方法非常相似,但也有一点不同默认情况下,
bulkCreate
不会在要创建的每个对象上运行验证(而create
可以做到). 为了使bulkCreate
也运行这些验证,必须通过validate: true
参数. 但这会降低性能. 用法示例:如果你直接从用户获取值,那么限制实际插入的列可能会有所帮助. 为了做到这一点,
bulkCreate()
接受一个fields
参数,该参数须为你要定义字段的数组(其余字段将被忽略).The text was updated successfully, but these errors were encountered: