Sequelize 中如何实现对结果集的过滤?

在使用 Sequelize 进行数据查询时,我们经常需要对结果集进行过滤,以便筛选出符合我们要求的数据。本文将介绍 Sequelize 提供的过滤 API,让您可以轻松地实现对结果集的过滤。

数据库查询

在介绍 Sequelize 的过滤 API 前,我们先来了解一下 Sequelize 的基本查询操作。

首先,我们需要定义一个 Sequelize 模型:

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

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

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

接下来,我们可以使用以下代码创建一个用户:

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

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

此时,我们已经在数据库中创建了一条用户数据,可以通过 toJSON() 方法获取它的值:

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

接下来,我们将使用这个用户数据进行过滤操作。

过滤 API

Sequelize 提供了一些 API,可以用来筛选出所需的数据。以下是常用的 API:

  • findAll(options: Object): Promise<Array<Model>>

    查询符合条件的所有数据。options 参数是一个对象,可以用来指定查询条件、排序方式、限制查询数量等。例如,我们可以使用以下代码查询年龄大于等于 18 的用户:

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

    输出结果:

    -
      -
        ----- --
        ------------ -------
        ----------- ------
        ------ ---
        ------------ ---------------------------
        ------------ --------------------------
      -
    -
  • findOne(options: Object): Promise<Model>

    查询符合条件的第一条数据。options 参数同 findAll 方法。

  • findByPk(id: number|string, options: Object): Promise<Model|null>

    根据主键查询数据。options 参数同 findAll 方法。

  • count(options: Object): Promise<number>

    查询符合条件的数据数量。options 参数同 findAll 方法。

条件表达式

在使用 Sequelize 进行查询时,我们需要指定一个条件表达式来筛选出符合条件的数据。条件表达式使用类似 SQL 的语法,可以组合多个条件来查询数据。以下是一些常用的条件表达式:

  • { [Op.eq]: value }

    指定等于某个值的查询条件。例如,where: { age: { [Op.eq]: 18 } } 表示查询年龄等于 18 的用户。

  • { [Op.ne]: value }

    指定不等于某个值的查询条件。

  • { [Op.gt]: value }

    指定大于某个值的查询条件。

  • { [Op.gte]: value }

    指定大于等于某个值的查询条件。

  • { [Op.lt]: value }

    指定小于某个值的查询条件。

  • { [Op.lte]: value }

    指定小于等于某个值的查询条件。

  • { [Op.between]: [min, max] }

    指定取值在某个范围内的查询条件。minmax 分别表示范围的最小值和最大值。

  • { [Op.notBetween]: [min, max] }

    指定取值不在某个范围内的查询条件。

  • { [Op.in]: [value1, value2, ...] }

    指定取值在某个集合内的查询条件。

  • { [Op.notIn]: [value1, value2, ...] }

    指定取值不在某个集合内的查询条件。

  • { [Op.like]: pattern }

    指定匹配某个模式的查询条件。pattern 是一个字符串,可以包含 %_ 通配符。

  • { [Op.notLike]: pattern }

    指定不匹配某个模式的查询条件。

  • { [Op.startsWith]: prefix }

    指定开头匹配某个字符串的查询条件。

  • { [Op.endsWith]: suffix }

    指定结尾匹配某个字符串的查询条件。

  • { [Op.substring]: substring }

    指定子字符串匹配某个字符串的查询条件。

以下是一个例子,筛选出开头为 "John" 的用户:

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

输出结果:

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

复合条件

有时我们需要同时满足多个条件才能筛选出数据,Sequelize 提供了多种方式来实现。

whereand

where 属性指定一个对象,表示查询条件。可以在该对象中使用 and 数组来指定多个条件。以下是一个例子,查询年龄大于等于 18 且小于等于 20 的用户:

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

输出结果:

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

or

or 属性指定一个数组,表示查询条件。数组中的每个元素都是一个对象,表示单独的查询条件。以下是一个例子,查询年龄等于 18 或 20 的用户:

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

输出结果:

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

not

not 属性指定一个对象,表示查询条件的反面。以下是一个例子,查询年龄不等于 18 的用户:

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

输出结果:

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

结论

Sequelize 提供了丰富的 API,可以轻松实现对结果集的过滤。本文介绍了 Sequelize 的基本查询操作、过滤 API,以及常用的查询条件和复合条件。希望通过本文的介绍,您能更加熟悉 Sequelize 的使用方法,从而更加高效地进行开发。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671619cdad1e889fe21ac582