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 对照

在mysql Sequelize + Nodejs中将数组和对象转换为批量插入

如何获取嵌套子查询以识别父查询列

如何编写 hql 查询或条件查询以根据时间戳获取最新记录