从对象数组中选择与MYSQL JSON中的属性匹配的对象

时间:2018-09-24 13:34:52

标签: mysql json mysql-json

我在MySQL数据库中有一个表,其中有1个JSON类型的列city,该表存储具有以下结构的city对象的JSON数组:

{
    "cities": [
        {
            "id": 1,
            "name": "Mumbai",            
            "countryID": "9"
        },
        {
            "id": 2,
            "name": "New Delhi",            
            "countryID": "9"
        },
        {
            "id": 3,
            "name": "Abu Dhabi",            
            "countryID": "18"
        }
    ]
}

我想从具有countryID = 90的城市数组中选择对象,但由于对象数组存储在单列city中而被困住了,这阻止了我执行(*)WHERE JSON_CONTAINS(city->'$.cities', JSON_OBEJECT('countryID', '90'))

我的查询看起来像这样,我什么也没得到

SELECT JSON_EXTRACT(city, '$.cities') FROM MyTable WHERE JSON_CONTAINS(city->'$.cities', JSON_OBJECT('countryID', '90'))

如果有人可以指出正确的方向或给我一个解决方案,那将是一个很大的帮助。

谢谢

1 个答案:

答案 0 :(得分:0)

如果使用的是MySQL 8.0,则有一个称为JSON table functions的功能。它将JSON数据转换为表格形式。然后,您可以过滤结果。

实现相同的查询如下

Select  country
 FROM json_cal,
   JSON_TABLE(
     city,
    "$.cities[*]" COLUMNS(
     country JSON PATH "$",
     NESTED PATH '$.countryID' COLUMNS (countryID TEXT PATH '$')          
     )
   ) AS  jt1 
where countryID = 90;

可以找到数据库小提琴here

有关JSON表功能的更多信息,请参见here