Sequelize 如何做到不在服务器内部解析 jsonb 数据?

在前端开发中,操作数据库是基本而重要的操作,而 Sequelize(简称Seq)则是 Node.js 中最好的 ORM 之一。它支持 Postgres、MySQL、MariaDB、SQLite 以及 MSSQL 等多种数据库。这篇文章将讨论Seq 如何处理 jsonb 数据,以及如何在不解析 jsonb 数据的情况下操纵。

什么是 jsonb 数据?

在数据库设计中,jsonb 是一个高级的数据类型,它可以存储非结构化和结构化数据。jsonb 类型与文本类型相比,具有一些明显的优点:

  • 可读性: jsonb 数据可以轻松阅读,并且可以通过键值对获取特定的信息。同时,它还可以清楚地表示数据之间的层次结构。
  • 可扩展性: 它可以轻松添加、删除或修改数据,而不需要单独进行数据迁移或表迁移。

如何在 Sequelize 中使用 jsonb 类型

在 Seq 中,我们可以使用 jsonb 数据类型来保存大量不可结构化的数据,并且我们还可以将jsonb 数据类型作为查询参数进行传递,以“表示其属性的键值对”。下面是一个示例模型:

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

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

在上面的示例中,data 列将存储可以结构化和非结构化数据。在创建记录时,此模型实例可通过以下方式进行:

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

接下来,我们将介绍 Seq 如何处理 jsonb 数据。

在 Seq 中操纵 jsonb 数据

在建立 Seq 模型并成功通过创建记录将 jsonb 数据添加到数据库之后,我们需要执行一些 CRUD 操作。 下面我们将介绍如何执行操作:

创建带有 jsonb 数据的记录

在创建记录时,可以通过以下方式将 jsonb 数据作为对象传递:

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

获取带有 jsonb 数据的记录

在获取包含 jsonb 数据的记录时,我们需要使用 Seq 提供的 Op 操作符。下面是一个简单的示例:

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

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

此查询将返回所有拥有具有名称 'John Smith' 的数据的记录。

更新 jsonb 数据

在更新记录时,我们可以使用 Model.update() 方法。请注意,Seq 不会解析 jsonb 数据。因此,我们需要使用 SQL 的 JSONB_METHODS 函数,类似于下面的示例:

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

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

删除 jsonb 数据

在删除 jsonb 数据时,我们需要使用 SQL 的 JSONB_METHODS 函数(类似于小节“更新 jsonb 数据”)。

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

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

如何在 Seq 中不解析 jsonb 数据

由于 Seq 不会解析 jsonb 数据,我们需要用到 SQL 的 JSONB_METHODS 函数,但是这种操作显得有些复杂。为了简化代码,我们可以使用 Sequelize 的 fn() 函数。这样,我们就可以使用 SQL 的 JSONB_METHODS 函数而不需要编写直接使用 SQL 的代码。

下面是一个简单的示例:

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

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

上面这个 JSONB_EXISTS 函数将验证数据列中是否存在 email 键,返回 true 或 false。这样我们就可以轻松查询包含指定键值的记录。

结论

以上就是如何在 Seq 中处理 jsonb 数据的介绍。Seq 不会解析 jsonb 数据,但它提供了与 SQL 的 JSONB_METHODS 函数相似的方法,可以轻松使用 jsonb 数据,并且我们还可以使用 fn() 函数,来更加轻便地操作 jsonb 数据列。

在处理任何类型的数据时,请确保遵循最佳实践,例如在操作数据库之前对数据进行验证和验证,以保护您的应用程序免受 SQL 注入攻击。

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