PostgreSQL通过嵌套对象查询JSONB数组

时间:2018-09-12 14:03:41

标签: postgresql jsonb

我具有以下数组JSON数据结构:

{ arrayOfObjects: 
    [
        {
            "fieldA": "valueA1", 
            "fieldB": { "fieldC": "valueC", "fieldD": "valueD" }
        },
        {
            "fieldA": "valueA", 
            "fieldB": { "fieldC": "valueC", "fieldD": "valueD" }
        }
    ]
}

我想选择fieldD符合我的条件(而fieldC未知)的所有记录。我已经看到类似的答案,例如Query for array elements inside JSON type,但是要查询的字段是一个简单的字符串(类似于在示例中对fieldA的搜索),我的问题是我想基于对象中的对象进行查询在数组中。

我尝试过类似select * from myTable where jsonData -> 'arrayOfObjects' @> '[ { "fieldB": { "fieldD": "valueD" } } ]' )之类的方法,但这似乎不起作用。

我如何实现自己想要的?

1 个答案:

答案 0 :(得分:1)

您可以直接在JSONB字段上执行“包含”查询,并传递您要查找的最小值:

SELECT *
FROM mytable
WHERE json_data @> '{"arrayOfObjects": [{"fieldB": {"fieldD": "valueD"}}]}'::JSONB;

当然,这假定fieldD始终嵌套在fieldB下,但这对于架构一致性而言是一个很低的门槛。