Sequelize 如何进行条件查询

阅读时长 4 分钟读完

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' 开头的用户记录,可以这么写:

3. 复合条件查询

在实际开发中,我们可能需要进行复合条件查询,即将多个条件组合使用。在 Sequelize 中,我们可以使用 and 或 or 操作符来实现复合查询。

以下为示例代码:

-- -------------------- ---- -------
----- ----- - ----- --------------
  ------ -
    -------- -
      -
        ---- - -------- -- -
      --
      -
        --------- -
          - ------ - ---------- ------------- - --
          - ---- - -------- -- - -
        -
      -
    -
  -
--

在上述代码中,我们使用了 or 操作符将两个条件组合起来,并使用 and 操作符将两个条件组合为一个。这样一来,我们就可以非常灵活地进行条件查询操作。

4. 总结

在 Sequelize 中进行条件查询是非常方便和灵活的。通过使用 Op 操作符和 and/or 操作符,我们可以轻松地实现多个条件的复合查询。同时,结合实际开发需求,我们还可以通过使用 Sequelize 查询器的其他方法,进行更为细致和精准的条件查询。

本文基于 Sequelize 版本为 6.4.0,更多详细的操作可以参考官方文档。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645c3e66968c7c53b0e87212

纠错
反馈