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

PostgreSQL query of JSONB array by nested object

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

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

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

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

我怎样才能达到我想要的?

您可以直接在 JSONB 字段上执行 "contains" 查询并传递您要查找的最小值:

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

这当然假设 fieldD 总是嵌套在 fieldB 下,但就模式一致性而言,这是一个相当低的标准。