JSON_CONTAINS() 与 MySQL 中的 JSON 对象数组
Posted
技术标签:
【中文标题】JSON_CONTAINS() 与 MySQL 中的 JSON 对象数组【英文标题】:JSON_CONTAINS() with an array of JSON objects in MySQL 【发布时间】:2021-03-07 07:58:11 【问题描述】:这是一个示例数据库“test”,其中包含 JSON 对象数组的 JSON 列“arr”
+----+----------------------------------------------------------+
| id | arr |
+----+----------------------------------------------------------+
| 1 | ["name": "aman", "name": "jay"] |
| 2 | ["name": "yash", "name": "aman", "name": "jay"] |
+----+----------------------------------------------------------+
我想使用 JSON_CONTAINS 来了解数组中某个对象的特定键中是否存在值。
这是我的查询:
SELECT JSON_CONTAINS(arr, '"jay"', '$[*].name') from test WHERE id=1;
我收到以下错误:
ERROR 3149 (42000):在这种情况下,路径表达式可能不包含 * 和 ** 标记或数组范围。
我知道我可以尝试为此使用JSON_EXTRACT()
,但是我在这里做错了什么?
有没有办法在 mysql 中使用JSON_CONTAINS
和 JSON 对象数组。
【问题讨论】:
【参考方案1】:您必须使用 JSON_SEARCH:
SELECT JSON_SEARCH(arr, 'one', 'jay', NULL, '$[*].name') IS NOT NULL
FROM test
WHERE id=1;
【讨论】:
【参考方案2】:是的,可以使用以下语法:
SELECT JSON_CONTAINS(arr, '"name": "jay"') from test WHERE id=1;
db<>fiddle demo
例子:
+-----+--------------------------------------------------------+---+
| id | arr | r |
+-----+--------------------------------------------------------+---+
| 1 | ["name": "aman", "name": "jay"] | 1 |
| 2 | ["name": "yash", "name": "aman", "name": "jay"] | 1 |
| 3 | ["name": "yash", "name": "aman"] | 0 |
+-----+--------------------------------------------------------+---+
【讨论】:
以上是关于JSON_CONTAINS() 与 MySQL 中的 JSON 对象数组的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 过滤 JSON_CONTAINS 数组中的任何值
MySQL JSON - 使用 IN 语句 | json_contains
mysql中json_contains和json_search的区别