在数据库中,我的文本字段包含具有以下结构的json:
"Limits":{
"fields":[
{
"key":"DAILY_LIMIT",
"value":"1559",
"lastModified":1543857829148,
},
{
"key":"MONTHLY_LIMIT",
"value":"25590",
"lastModified":1543857829148,
}
]
}
我需要检查daily_limit是否存在。使用LIKE%DAILY_LIMIT%很容易,但是性能不是很好,而且我也无法获得价值(现在我不需要价值,也许将来会需要)。有一个选项可以检查此键是否存在而不杀死数据库?我尝试了'Limits'->'fields'->,但我不知道下一步该怎么做...而且必须通过查询完成,我无法将对象传递给后端,然后进行检查
答案 0 :(得分:1)
如果您想用JSON方法做到这一点,这可能是一个解决方案:
WITH data AS (
SELECT 'somedata' as somedata, '{"Limits":{"fields":[{"key":"DAILY_LIMITS","value":"1559","lastModified":1543857829148},{"key":"MONTHLY_LIMIT","value":"25590","lastModified":1543857829148}]}}'::jsonb as data
)
SELECT
d.*
FROM data d, jsonb_array_elements(data -> 'Limits' -> 'fields')
WHERE value ->> 'key' = 'DAILY_LIMITS'
jsonb_array_elements
将数组扩展为每个元素一行。在下一步中,您可以检查key
的值。
但是该演示显示,一个简单的LIKE
会比@ 404正确提到的要快得多(请看一下两个示例的成本。)