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 下,但就模式一致性而言,这是一个相当低的标准。
我有以下数组 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 下,但就模式一致性而言,这是一个相当低的标准。