在前端开发中,有些数据存储在 JSON 格式中,而 Sequelize 是一个流行的 Node.js ORM 框架,用于在 JavaScript 中执行 SQL 查询。Sequelize 支持对 JSON 类型的字段进行复杂查询,这使得我们可以更轻松地处理 JSON 数据。
在本文中,我们将介绍如何在 Sequelize 中使用 JSON 查询技巧来获取所需的数据。
JSON 字段使用
在 Sequelize 中,JSON 字段被称为 JSONB
类型。要在模型中定义 JSONB 列,我们使用 DataTypes.JSONB
。
-- -------------------- ---- ------- ----- ---- - ------------------------ - ----- ----------------- -------- --------------- --- -- - ---- -------- ------------- ----- ----- ------- -------- - ------- ---- --- -------- ----- ---- ------ ------ ---- - ---
现在,我们已经在数据库中创建了一个名为 User
的表,并将一些数据存储在其中。接下来,我们将学习如何查询这些数据。
简单 JSON 查询
要查询包含特定 JSON 值的行,我们可以使用 JSON_CONTAINS
或 JSONB_CONTAINS
运算符。例如,如果我们要查找在 address
列中包含州为 "NY" 的用户,则可以使用以下查询:
User.findAll({ where: { address: { state: 'NY' } } });
在上面的查询中,address: { state: 'NY' }
将被序列化为 address @> '{"state": "NY"}'
,这是 JSONB_CONTAINS
运算符所需的格式。
复杂 JSON 查询
对于更复杂的 JSON 查询,Sequelize 提供了许多运算符和函数,可以在查询中使用。以下是一些常用的运算符和函数:
- $or
和 $and
$or
和 $and
运算符可以用于组合多个条件。例如,假设我们想要查找住在纽约或洛杉矶的用户:
User.findAll({ where: { $or: [ { 'address.city': 'New York' }, { 'address.city': 'Los Angeles' } ] } });
- $gt
,$gte
,$lt
和 $lte
$gt
,$gte
,$lt
和 $lte
运算符可以用于比较数字或日期类型。例如,以下查询将查找住在 New York,且生日在 1980 年后的用户:
-- -------------------- ---- ------- -------------- ------ - -------- - ----- ---- ----- -- --------- - ---- --- ------------------ - - ---
- $like
$like
运算符可以用于模糊匹配字符串。例如,以下查询将查找名字以 'John' 开头的用户:
User.findAll({ where: { name: { $like: 'John%' } } });
- $in
$in
运算符可以用于指定一个值列表。例如,以下查询将查找住在 New York 或 Los Angeles,且年龄为 20 或 30 的用户:
User.findAll({ where: { $or: [ { 'address.city': { $in: ['New York', 'Los Angeles'] } }, { age: { $in: [20, 30] } } ] } });
结论
在本文中,我们介绍了如何在 Sequelize 中使用 JSON 查询技巧。我们了解了 JSONB 列的使用方法以及一些查询运算符和函数。这些技巧可以帮助我们在处理 JSON 数据时更轻松地获取所需的数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674cd925a336082f2545b617