Выберите объекты из массива объектов, которые соответствуют свойству в MYSQL JSON - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть таблица с 1 столбцом типа JSON city в базе данных MySQL, в которой хранится массив JSON объектов города со следующей структурой:

{
    "cities": [
        {
            "id": 1,
            "name": "Mumbai",            
            "countryID": "9"
        },
        {
            "id": 2,
            "name": "New Delhi",            
            "countryID": "9"
        },
        {
            "id": 3,
            "name": "Abu Dhabi",            
            "countryID": "18"
        }
    ]
}

Я хочу выбрать объекты из массива города, имеющие countryID = 90 но я застрял, так как массив объектов хранится в одном столбце city, что мешает мне выполнить (*) с WHERE JSON_CONTAINS(city->'$.cities', JSON_OBEJECT('countryID', '90')).

Мой запрос выглядит так, и я не получаюв любом месте,

SELECT JSON_EXTRACT(city, '$.cities') FROM MyTable WHERE JSON_CONTAINS(city->'$.cities', JSON_OBJECT('countryID', '90'))

Было бы очень полезно, если бы кто-то мог указать мне правильное направление или дать мне решение этой проблемы.

Спасибо

1 Ответ

0 голосов
/ 26 октября 2018

Если вы используете MySQL 8.0, есть функция под названием JSON table functions.Он преобразует данные JSON в табличную форму. Затем вы можете отфильтровать результат.

Запрос на получение того же результата приведен ниже

Select  country
 FROM json_cal,
   JSON_TABLE(
     city,
    "$.cities[*]" COLUMNS(
     country JSON PATH "$",
     NESTED PATH '$.countryID' COLUMNS (countryID TEXT PATH '$')          
     )
   ) AS  jt1 
where countryID = 90;

Здесь можно найти скрипку БД

Более подробную информацию о табличных функциях JSON можно найти здесь

...