@Kerm

MySQL поле с типом JSON как искать по значению внутри многомерного массива и сделать для него индекс?

Есть json:

{
  "outNum": "23123",
  "userId": 657,
  "outDate": "2017-11-17",
  "reasonNum": "123-рчс-17-0084",
  "FiasAoguid": [
    "da051ec8-da2e-4a66-b542-473b8d221ab4",
    "29251dcf-00a1-4e34-98d4-5c47484a36d4"
  ],
  "reasonDate": "2017-07-16"
}


Если для обычного значения json я могу сделать отдельную виртуальную колонку с ключом и фильтровать по ней:

ALTER TABLE `default` ADD COLUMN `json_outDate_virtual` date GENERATED ALWAYS AS (`properties` ->> '$."outDate"') COMMENT 'Дата';


То, по массивам я не представляю как сделать такой индекс или вообще как фильтровать его, запрос типа этого, не работает:

select * from default where JSON_EXTRACT(`properties`, "$.FiasAoguid") LIKE "da051ec8-da2e-4a66%";
select * from default where JSON_EXTRACT(`properties`, "$.FiasAoguid[*]") LIKE "bd8e6511-e4b9-4841-90de%";
select * from default where `properties`->"$.FiasAoguid[*]" LIKE "bd8e6511-e4b9-4841-90de%";


Может можно конкатенацию как то сделать в стринговое поле занчений масива, скажем через запятую и лайкать по ним?

Вот так я могу получить значение конкретного ключа:

select `properties`->"$.FiasAoguid[0]" as code from claims where `properties`->"$.FiasAoguid" is not null;


Не пойму как сделать поиск по всем ключам [*] не помогает
  • Вопрос задан
  • 297 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы