Sequelize 中的 Ordering

Sequelize 是一个流行的 Node.js ORM,可用于管理关系型数据库的数据,如 Postgres、MySQL 和 SQLite。一项重要的功能是对查询结果进行排序,以便按指定的条件对结果进行排序。

排序基础

在 Sequelzie 查询中添加排序很简单,可以通过 order选项指定排序方式,该选项允许字符串或数组作为参数:

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

上面代码将按 firstName 字段按降序排列。

多列排序

Sequelize 还允许按多列排序,只需将多个排序规则的数组传递给 order选项即可:

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

上面代码将按从 A 到 Z 排序 firstName,如果有重复值,则按 lastName 按照倒叙排序次要排序。

包含关联关系的排序

在包含有关联关系的查询中对结果进行排序需要更多的操作。如果我们想按照关联表中某个属性对嵌套的对象进行排序,我们需要在options 对象中使用 sequelize.fn() 或 sequelize.col() 指示 Sequelize 编写 JOIN 子句,这里我们举例包含关联别名的查询:

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

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

以上示例首先使用了 include 的方式将 posts 关联表与 User 关联起来,我们指定 show 中需要取出 title 属性并设置 required: true 来避免没有 post 数据的情况。

我们在 User 上指定 order 参数时附加一个数组,在这个数组中通过 sequelize.fn() 创建了一个 LENGTH() 函数指代在 Post 表中的每一行的 title 字段长度。因此,我们对结果进行排序时将按照使用 DESC 顺序排列该长度。

结论

Sequelize 提供了便利的方式对查询结果进行排序,使用 Sequelize.fn() 或 Sequelize.col() 可以处理包含关联查询的情况。

希望本文可以帮助您更好地理解 Sequelize 中的排序功能,如果您还有其他问题,请查阅文档

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