【问题标题】:mySQL/Sequelize - how to query to get data whose field is empty arraymySQL/Sequelize - 如何查询以获取字段为空数组的数据
【发布时间】:2020-10-13 00:12:48
【问题描述】:

我的 http 请求将返回以下数据:
它返回以下数据:

Users.js

{
    {
       ...
       friends:[]
    },
    {
       ...
       friends:[{id:xxx,...},...]
    },
    {
       ...
       friends:[]
    },
}

如果我想使用查询来获取好友数组为[]的所有数据,
我应该做以下查询吗?
select * from users where (这里应该写什么)

【问题讨论】:

    标签: mysql sql orm sequelize.js


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 2020-07-04
      • 2013-01-26
      • 1970-01-01
      相关资源
      最近更新 更多