3

我的问题是关于在 mysql 的 JSON 数据类型中搜索时搜索 json 数组的内容。

数据库结构

所以,如果我在 mysql 表中有两行,带有一个 json 字段,称为foo.

第一行有:

{
  "items": [
    {"type": "bar"}
  ]
}

第二行有:

{
  "items": [
    {"type": "baz"}
  ]
}

有效的东西

我可以跑

select `foo`->"$.items[0].type" from `jsontest`

返回 2 个结果:barbaz

我可以跑

select `id` from `jsontest` where `foo`->"$.items[0].type" = "bar"

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

我的问题

mysql 文档声明您可以使用“[*]评估 JSON 数组中所有元素的值”。

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

select `id` from `jsontest` where `foo`->"$.items[*].type" = "bar"

我的查询有什么问题?

4

1 回答 1

11

进行以下查询:

select id, `foo`->"$.items[*].type[0]" from `jsontest`;

您会注意到返回值显示为“[bar]”,即 JSON 数组。

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

无论如何,以下查询也应该有效:

select id from `jsontest` where JSON_SEARCH(`foo`, 'all','bar') is not null;
于 2016-07-29T21:09:13.140 回答