#mysql #sql #orm #sequelize.js
#mysql #sql #orm #sequelize.js
Вопрос:
Мой http-запрос вернет данные ниже:
он возвращает данные ниже:
Users.js
{
{
...
friends:[]
},
{
...
friends:[{id:xxx,...},...]
},
{
...
friends:[]
},
}
Если я хочу использовать запрос для получения всех данных, массив друзей которых равен [],
я должен выполнить запрос ниже.
выберите * из пользователей, где (что я должен написать здесь)
Ответ №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 и один из ключей находится friends
в этом json для данного столбца ( 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!!!')
]
}
})
Обязательно обновите Model
свою user
модель и запрос.