Sequelize 的查询总结

阅读时长 6 分钟读完

在 Node.js 的 Web 应用开发中,ORM 是不可避免的一个主题。Sequelize 是一个值得推荐的 ORM 库,它支持 MySQL、PostgreSQL、SQLite 和 MSSQL 数据库,提供了丰富的功能和接口。在使用 Sequelize 进行 Web 应用开发的过程中,查询是最基础也最核心的一个环节,因此本文整理了 Sequelize 的查询功能。

查询基础

查询构造器

Sequelize 采用类似 jQuery 的查询构造器,使用完整的链式方法调用来构造查询,并最终使用 .then()await 发出请求。例如:

在这个例子中,使用 User.findAll() 构建一条查询,查询的条件是 age > 18,按照 createdAt DESC 的顺序,并最多返回 10 条结果。

操作符

Sequelize 提供了丰富的操作符,可以满足各种条件查询的需求。例如:

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

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

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

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

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

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

具体的操作符可以在 官方文档 中查看。

字段选择

查询时可以选择需要查询的字段,以减小查询结果集的大小。例如:

在这个例子中,只查询 nameemail 两个字段。

分页查询

分页查询非常常见,Sequelize 也提供了方便的查询方式。例如:

在这个例子中,查询从第 10 条记录开始,最多返回 10 条记录。

数据关联查询

在关系型数据库中,我们经常需要进行数据关联查询。Sequelize 支持多种数据关联方式,以下分别介绍。

一对多关联

在一对多的关系中,一个模型拥有多个关联模型。例如,一个博客文章有多个评论,那么博客文章模型就拥有多个评论模型。

定义模型时,需要在一方的模型中使用 hasMany 方法声明多方模型的关联,例如:

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

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

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

这样,通过 Article 模型可以轻松地查询它拥有的所有 Comment 模型。例如:

在这个例子中,查询 id 为 1 的 Article 模型,并查询它拥有的所有 Comment 模型。

一对一关联

在一对一的关系中,一个模型只拥有一个关联模型,反之亦然。例如,一个用户只能拥有一个身份证,一个身份证只能属于一个用户。

定义模型时,需要在一方的模型中使用 hasOne 方法声明一方模型的关联,例如:

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

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

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

这样,通过 User 模型可以轻松地查询它拥有的 IdCard 模型,反之亦然。例如:

在这个例子中,查询 id 为 1 的 User 模型,并查询它拥有的 IdCard 模型。

多对多关联

在多对多的关系中,两个模型相互拥有多个关联模型。例如,一个 Course 模型可以拥有多个 Student 模型,一个 Student 模型也可以拥有多个 Course 模型。

定义模型时,需要在两个模型之间使用 belongsToMany 方法声明两个模型的关联,例如:

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

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

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

这样,通过 Course 模型或 Student 模型都可以轻松地查询它拥有的其他模型。例如:

在这个例子中,查询 id 为 1 的 Course 或 Student 模型,并查询它拥有的其他模型。

总结

Sequelize 是一个功能丰富的 ORM 库,它提供了丰富的查询功能,并支持多种数据关联方式。我们可以使用 Sequelize 构建完整的 Web 应用,并减少与数据库打交道的复杂性。在实际开发中,我们应根据需求选择不同的查询方式,以达到最优的性能和体验。

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

纠错
反馈