在我的表中,我有一个JSON
字段,该字段具有带键值的对象,其中某些值是数组。分别使用JSON_CONTAINS_PATH
和JSON_EXTRACT
可以很容易地验证单个键是否存在,或者键是否具有指定值,但是我需要再走一两个步骤。
我需要找到一个具有指定键和值的数组元素(一个对象),同时检查另一个指定键是否不存在或是否存在且具有虚假值。
我一直在尝试JSON_CONTAINS_PATH
和JSON_EXTRACT
和JSON_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"}
,它将返回0
。 0
通常是有效的响应,但是我们目前对"b"
的用法是EXISTS && TRUE
,EXISTS && FALSE
和NOT EXISTS
。前两个示例与上面的示例一起使用,但是我无法找到一种方法来验证"a" = "abc" && "b" NOT EXISTS
是否与MySQL
提供的当前JSON functions
此外,我尝试了JSON_CONTAINS(@j->>"$.data", JSON_OBJECT('a', 'abc', 'b', NULL))
也无济于事。