Sequelize 是一款优秀的 Node.js ORM 框架,允许你在不需要学习 SQL 语言的情况下,操作数据库。在实际开发中,我们经常需要进行条件查询操作。本文将详细介绍如何在 Sequelize 中进行条件查询,并给出相应代码示例和指导意义。
1. 基础查询
在 Sequelize 中进行条件查询,首先需要从 Model 中实例化一个查询器,然后链式调用 where() 方法,传入对应的条件参数即可进行查询。例如:
-- -------------------- ---- ------- ----- - -- - - --------------------- ----- ---- - ------------------------ - --------- ----------------- --------- ----------------- ------ ----------------- ---- ----------------- --- ----- ----- - ----- -------------- ------ - --------- ------ - ---
在上述代码中,我们从 User Model 中实例化了一个查询器,并使用 where() 方法查询了用户名为 john 的 User 记录。当然,我们还可以使用 Op 操作符来进行更多的条件查询操作。
2. Op 操作符
Sequelize 中定义了许多 Op 操作符,可以帮助我们在查询时组合更复杂的条件。以下为常用的 Op 操作符:
操作符 | 含义 | 示例 |
---|---|---|
Op.eq | 等于 | { age: { [Op.eq]: 18 } } |
Op.ne | 不等于 | { age: { [Op.ne]: 18 } } |
Op.gt | 大于 | { age: { [Op.gt]: 18 } } |
Op.gte | 大于等于 | { age: { [Op.gte]: 18 } } |
Op.lt | 小于 | { age: { [Op.lt]: 18 } } |
Op.lte | 小于等于 | { age: { [Op.lte]: 18 } } |
Op.between | 在范围内 | { age: { [Op.between]: [18, 30] } } |
Op.notBetween | 不在范围内 | { age: { [Op.notBetween]: [18, 30] } } |
Op.in | 在列表内 | { age: { [Op.in]: [18, 19, 20] } } |
Op.notIn | 不在列表内 | { age: { [Op.notIn]: [18, 19, 20] } } |
Op.startsWith | 开始于 | { username: { [Op.startsWith]: 'jo' } } |
Op.endsWith | 结束于 | { username: { [Op.endsWith]: 'hn' } } |
Op.substring | 包含 | { username: { [Op.substring]: 'oh' } } |
例如,我们想查询用户名以 'jo' 开头的用户记录,可以这么写:
const users = await User.findAll({ where: { username: { [Op.startsWith]: 'jo' } } });
3. 复合条件查询
在实际开发中,我们可能需要进行复合条件查询,即将多个条件组合使用。在 Sequelize 中,我们可以使用 and 或 or 操作符来实现复合查询。
以下为示例代码:
-- -------------------- ---- ------- ----- ----- - ----- -------------- ------ - -------- - - ---- - -------- -- - -- - --------- - - ------ - ---------- ------------- - -- - ---- - -------- -- - - - - - - --
在上述代码中,我们使用了 or 操作符将两个条件组合起来,并使用 and 操作符将两个条件组合为一个。这样一来,我们就可以非常灵活地进行条件查询操作。
4. 总结
在 Sequelize 中进行条件查询是非常方便和灵活的。通过使用 Op 操作符和 and/or 操作符,我们可以轻松地实现多个条件的复合查询。同时,结合实际开发需求,我们还可以通过使用 Sequelize 查询器的其他方法,进行更为细致和精准的条件查询。
本文基于 Sequelize 版本为 6.4.0,更多详细的操作可以参考官方文档。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645c3e66968c7c53b0e87212