mySQL/Sequelize - 如何查询以获取字段为空数组的数据
Posted
技术标签:
【中文标题】mySQL/Sequelize - 如何查询以获取字段为空数组的数据【英文标题】:mySQL/Sequelize - how to query to get data whose field is empty array 【发布时间】:2020-10-13 00:12:48 【问题描述】:我的 http 请求将返回以下数据: 它返回以下数据:
Users.js
...
friends:[]
,
...
friends:[id:xxx,...,...]
,
...
friends:[]
,
如果我想使用查询来获取好友数组为[]的所有数据, 我应该做以下查询吗? select * from users where (这里应该写什么)
【问题讨论】:
【参考方案1】:如果friends
是数据库中的直接列,则为JSON
数组。您可以使用JSON_LENGTH
找出数组的长度。
SELECT JSON_LENGTH('[1, 2, "a": 3]'); // Output: 3
SELECT JSON_LENGTH('[]'); // Output: 0
您可以使用相同的概念从数据库中获取数据。
select *
FROM users
WHERE JSON_LENGTH(friends) = 0;
如果您嵌套了 JSON,并且其中一个键是给定列的那个 json 中的 friends
(data
),那么您的查询就像使用 JSON_CONTAINS
SELECT *
FROM users
WHERE JSON_CONTAINS(data, JSON_ARRAY(), '$.friends') -- To check do we have `friends` as key in that json
and JSON_LENGTH(data, '$.friends') = 0; -- To check whether it is empty array.
现在您可以将其转换为 sequelize 查询。您可以使用的一种方式是
Model.findAll(
where:
[Op.and]: [
Sequelize.literal('RAW SQL STATEMENT WHICH WONT BE ESCAPED!!!')
]
)
确保使用您的 user
模型和查询更新 Model
。
【讨论】:
以上是关于mySQL/Sequelize - 如何查询以获取字段为空数组的数据的主要内容,如果未能解决你的问题,请参考以下文章
如何在 mysql Sequelize 实例中拥有数组的数据类型?
使用 NodeJS 将启动和停止时间发布到 mysql(sequelize)
Sequelize 和 MySQL 对照Sequelize 和 MySQL 对照