用于遍历数组的mysql JSON路径的正确语法?

ste*_*tef 2 mysql mysql-json

我的问题是在搜索mysql的JSON数据类型时搜索json数组的内容.

数据库结构

所以,如果我在mysql表中有两行,则调用json字段foo.

第一行有:

{
  "items": [
    {"type": "bar"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

第二行有:

{
  "items": [
    {"type": "baz"}
  ]
}
Run Code Online (Sandbox Code Playgroud)

有用的东西

我可以跑

select `foo`->"$.items[0].type" from `jsontest`
Run Code Online (Sandbox Code Playgroud)

返回2结果:barbaz

我可以跑

select `id` from `jsontest` where `foo`->"$.items[0].type" = "bar"
Run Code Online (Sandbox Code Playgroud)

返回1结果:1- 即.第一行的id.

我的问题

MySQL的文档状态,您可以使用[*],以"评估在一个JSON阵列中的所有元素的值".

但是,以下查询返回零项:

select `id` from `jsontest` where `foo`->"$.items[*].type" = "bar"
Run Code Online (Sandbox Code Playgroud)

我的查询有什么问题?

ole*_*gsv 10

进行以下查询:

select id, `foo`->"$.items[*].type[0]" from `jsontest`;
Run Code Online (Sandbox Code Playgroud)

您会注意到返回的值显示为"[bar]",即JSON数组.

select * from `jsontest` 
where `foo`->"$.items[*].type" = JSON_ARRAY('bar');
Run Code Online (Sandbox Code Playgroud)

无论如何,以下查询也应该起作用:

select id from `jsontest` where JSON_SEARCH(`foo`, 'all','bar') is not null;
Run Code Online (Sandbox Code Playgroud)