我正在使用 IBM Db2(版本 11.5),并且尝试查询存储在名为 data 的列中的 JSON 数据,该列包含对象数组。但是,我使用 JSON_EXISTS 的查询没有返回预期结果。
JSON 结构(此处简化)包含一个数组 field7,我需要检索 field7 中存在对象且 field11 等于“target”的行。但是,我使用 JSON_EXISTS 的查询没有返回预期结果。
数据列中存储的简化 JSON 数据如下所示:
{
"randomField1": "randomValue",
...
"outerField":
[
{
"innerField": "target"
},
{
"innerField": "dummy1"
},
{
"innerField": "dummy2"
}
]
}
我想使用 JSON Path,并使用在线评估工具,我发现这个查询应该可以工作:
$.outerField[?(@.innerField== "target")].
鉴于我不能直接使用 JSON_VALUE 和 json 路径,例如:
JSON_VALUE(data, '$.outerField[*].innerField') = 'target'
因为 JSON_VALUE 只需要一个值(outerField[0].innerFieldworks 如预期)。
我认为我可以使用 Db2 的 JSON_EXISTS 函数:
SELECT *
FROM test_entity
WHERE JSON_EXISTS(
data,
'$.outerField[?(@.innerField== "target")]'
)
不幸的是,即使示例 JSON 清楚地显示了outerField 中的对象,且innerField 等于“target”,也不会返回任何行。
有什么想法或建议吗?
SELECT * FROM test_entity
where json_exists(data, '$?(@.outerField[*].innerField == "target")') ;