2016-10-11 11 views
0

JSONBデータ型を照会するためのワイルドカード演算子を探しています。JSONB内のワイルドカード

$> Campaign.find(43).style_item_map 

{"0"=>{"items"=>[876, 875], "style"=>"First", "featured"=>[876, 875]}, "1"=>{"items"=>[999, 998], "style"=>"Secondary", 
"featured"=>[]}} 

このようなクエリを探して:これで例えば(%はここで働いていません)

Campaign.where("style_item_map @> '{\"%\":{\"items\": [876]}}'") 

答えて

1

私は、ドキュメントのこの種の二回jsonb_eachを使用する必要があると仮定します。

WITH t(style_item_map) AS (VALUES 
    ('{ 
    "0": { 
    "items":[876, 875], 
    "style":"First", 
    "featured":[876, 875] 
    }, 
    "1": { 
    "items":[999, 998], 
    "style":"Secondary", 
    "featured":[] 
    } 
}'::JSONB) 
) 
SELECT 
    item.key, 
    inner_item 
FROM t, 
    jsonb_each(t.style_item_map) item, 
    jsonb_each(item.value) inner_item 
WHERE 
    inner_item.key = 'items' 
AND 
    inner_item.value @> '[876]'; 

結果:

key |  inner_item  
-----+---------------------- 
0 | (items,"[876, 875]") 
(1 row)