MySQL JSON:如何检查数组中的对象是否有两个键,其中第一个键值已给定

时间:2019-07-16 15:11:24

标签: mysql mysql-5.7 mysql-json

在我的表中,我有一个JSON字段,该字段具有带键值的对象,其中某些值是数组。分别使用JSON_CONTAINS_PATHJSON_EXTRACT可以很容易地验证单个键是否存在,或者键是否具有指定值,但是我需要再走一两个步骤。

我需要找到一个具有指定键和值的数组元素(一个对象),同时检查另一个指定键是否不存在或是否存在且具有虚假值。

我一直在尝试JSON_CONTAINS_PATHJSON_EXTRACTJSON_CONTAINS的组合

例如:

mysql> SET @j = '{"data": [{"a": "abc", "b": true}, {"a": "123"}]}';
mysql> SELECT * FROM db.table WHERE JSON_CONTAINS(@j->>"$.data", JSON_OBJECT('a', 'abc', 'b', true))
+--------------+
| RESULT:    1 |
+--------------+

上面的方法效果很好,但是如果我尝试将其应用于第二个对象{"a": "123"},它将返回00通常是有效的响应,但是我们目前对"b"的用法是EXISTS && TRUEEXISTS && FALSENOT EXISTS。前两个示例与上面的示例一起使用,但是我无法找到一种方法来验证"a" = "abc" && "b" NOT EXISTS是否与MySQL提供的当前JSON functions

此外,我尝试了JSON_CONTAINS(@j->>"$.data", JSON_OBJECT('a', 'abc', 'b', NULL))也无济于事。

0 个答案:

没有答案