[英]JSONB nested query postgres rails
我有一個jsonb列,其中存儲了一些過濾數據。 我在列中存儲數據的結構如下所示,
[
{
"filter":[
{
"key":"first_name",
"condition":"has_any_value"
},
{
"key":"count_of",
"value":"1",
"event_id":"130",
}
]
},
{
"filter":[
{
"key":"count_of",
"value":"1",
"event_id":"130"
}
],
"filter_operator":"AND"
},
{
"filter":[
{
"key":"user_id",
"value":"12",
"condition":"equals"
},
{
"key":"count_of",
"value":"112",
"event_id":"130"
],
"filter_operator":"OR"
}
]
我需要查詢過濾器JSON是否包含特定事件ID(任何“ filter
”數據中都可能存在),但是我找不到一種查詢特定事件ID是否存在於我擁有的結構中的方法(數組- >每個filter
數據->任何哈希都可能包含事件ID)。 我正在使用postgres 10.1。 有人可以幫忙嗎?
發布一種可能的方法之前的一件事:請注意,這在性能方面將是非常糟糕的,因為這始終需要您進行全表掃描。 具有比我更多DBA經驗的人可能知道在此處添加索引的巧妙方法,但是就可維護性而言,還是建議選擇稍有不同的方法。
話雖如此,這是我的方法。
with filters as (
select id, jsonb_array_elements(
jsonb_array_elements(my_jsonb_column)->'filter') as filter
from my_table
)
select distinct id from filters where filter @> '{"event_id":"130"}'::jsonb
這將為您提供所有記錄的ID,包括事件ID。
這是一個演示的小提琴: https : //www.db-fiddle.com/f/hMSjM675cqQQnb734V4zne/0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.