我具有以下数组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" } } ]' )
之类的方法,但这似乎不起作用。
我如何实现自己想要的?
答案 0 :(得分:1)
您可以直接在JSONB字段上执行“包含”查询,并传递您要查找的最小值:
SELECT *
FROM mytable
WHERE json_data @> '{"arrayOfObjects": [{"fieldB": {"fieldD": "valueD"}}]}'::JSONB;
当然,这假定fieldD始终嵌套在fieldB下,但这对于架构一致性而言是一个很低的门槛。