Sequelize 如何使用 Op 操作符进行复杂查询
在 Node.js 中,Sequelize 是用户友好的 ORM 框架,它可以轻松地将 JavaScript 对象映射到数据库中的表。Sequelize 提供了强大的操作符(Op)来进行各种复杂查询,本文将向您介绍如何使用这些操作符。
Op 操作符的基础
在 Sequelize 中,可以使用 Op 操作符进行各种比较操作,并传递给 where 子句。完整的 Op 操作符列表如下:
-- -------------------- ---- ------- ----- - -- - - --------------------- ------ ----- ------ ----- ----- ----- ------ ----- ------ ---------- ------------- ----- -------- ------- ---------- -------- ----------- ------------- ----------- ------------ --------- ------------ ---------- ------------- ---------- ----------- ------------ ------ ------ --------- ------
您可以在 where 子句中使用这些操作符并将它们与逻辑操作符(and,or,not)组合使用,以构建复杂的查询。
示例操作
作为示例,我们将考虑一个简单的用户数据库表,其中包含用户的姓名、电子邮件和年龄。以下是表定义:
const User = sequelize.define('User', { name: Sequelize.STRING, email: Sequelize.STRING, age:Sequelize.INTEGER });
基本查询
要查找 name 为 John 的用户,可以这样做:
const john = await User.findOne({ where: { name: "John" } });
要将 John 之外的所有用户返回,请使用 not 操作符:
const allUsersExceptJohn = await User.findAll({ where: { name: { [Op.not]: "John" } } });
该操作符将 negate(否定)表达式中的值。
多条件查询
您可以使用多个操作符来构建更复杂的查询。例如,以下查询将返回大于 30 岁且电子邮件为 example.com 的所有用户:
-- -------------------- ---- ------- ----- ----- - ----- -------------- ------ - ---- - -------- -- -- ------ - ---------- -------------- - - ---
模糊查询
模糊查询可以使用 like 和 iLike 操作符来实现,其中 iLike 操作符不敏感大小写。例如,要查找 name 中包含字母s的所有用户,请使用以下代码:
const users = await User.findAll({ where: { name: { [Op.like]: "%s%" } } });
范围查询
也可以使用 between 和 notBetween 操作符查询范围内的记录。例如:
const users = await User.findAll({ where: { age: { [Op.between]: [20, 40] } } });
结尾和开头查询
要查找以特定字符串结尾或开头的用户,请使用 startsWith 和 endsWith 操作符:
const users = await User.findAll({ where: { email: { [Op.startsWith]: "john" } } });
结论
Sequelize 中的操作符有助于构建复杂查询,并且可以使用多个操作符来构建适合您需求的查询条件。本文提供了一些基础示例,希望这些示例能够帮助您更好地理解如何使用 Op 操作符查询数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/675136e98bd460d3ad87725e