JSON_CONTAINS() 在 MySQL 中包含 JSON 个对象数组

JSON_CONTAINS() with an array of JSON objects in MySQL

这是一个示例数据库 'test',其中 JSON 列 'arr' 包含 JSON 个对象的数组

+----+----------------------------------------------------------+
| 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): In this situation, path expressions may not contain the * and ** tokens or an array range.

我知道我可以尝试为此使用 JSON_EXTRACT(),但我在这里做错了什么?

有什么方法可以将 JSON_CONTAINS 与 MySQL 中的 JSON 个对象数组一起使用吗?

是的,可以使用以下语法:

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_SEARCH:

SELECT JSON_SEARCH(arr, 'one', 'jay', NULL, '$[*].name') IS NOT NULL
FROM test 
WHERE id=1;