簡體   English   中英

JSONB嵌套查詢Postgres Rails

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM