0

我有一個模型叫做事件,其中我有stored_accessor「列表」(存儲像data: {"list"=>[{"key"=>"key1", "value"=>"value1"}]})。搜索jsonb和數組組合在postgres與rails4 stored_accessor

我需要做一個搜索查詢Ø

#<Event id: "1", title: "HHHH", description: nil, data: {"list"=>[{"key"=>"key1", "value"=>"value1"}, {"key"=>"key2", "value"=>"value2"}]}, created_at: "2017-04-14 21:06:22", updated_at: "2017-04-20 10:36:08"> 
#<Event id: "2", title: "HHHH", description: nil, data: {"list"=>[{"key"=>"key1", "value"=>"value1"}]}, created_at: "2017-04-14 21:06:22", updated_at: "2017-04-20 10:36:08"> 
#<Event id: "3", title: "HHHH", description: nil, data: {"list"=>[{"key"=>"key11", "value"=>"value11"}, {"key"=>"key12", "value"=>"value12"}]}, created_at: "2017-04-14 21:07:22", updated_at: "2017-04-20 10:37:08"> 
#<Event id: "4", title: "HHHH", description: nil, data: {"list"=>[{"key"=>"key111", "value"=>"value111"}, {"key"=>"key112", "value"=>"value112"}]}, created_at: "2017-04-14 21:08:22", updated_at: "2017-04-20 10:38:08"> 

我有一個檢索算法PARAMS像

1) {'key'=> 'key1', 'value'=> 'value1'} 
2) ["key"=>"key1", "value"=>"value1"}, {"key"=>"key2", "value"=>"value2"}] 

在第一種情況下,它應該返回Event ID 12

在第二種情況下,應返回Event id 1。 (事件如果返回1 and 2都可以接受)。我不確定json和數組的組合。 請幫忙。

+0

您是否閱讀過['jsonb'](https://www.postgresql.org/docs/9.5/static/functions-json.html)的文檔?你嘗試過什麼嗎? –

+0

是的,我知道,但我的屬性是位嵌套像數據:{「list」=> [{「key」=>「key1」,「value」=>「value1」},{「key」=>「 key2「,」value「=>」value2「}]}',data - > list - > {key,value}(然後檢查哈希) – Vinay

回答

0

你可以用PostgreSQL jsonb的操作符@>來做到這一點。還需要編寫搜索參數的完整路徑:{'list' => [{'key'=> 'key1', 'value'=> 'value1'}]}。試試這段代碼:

to_contain1 = {'list' => [{'key'=> 'key1', 'value'=> 'value1'}]} 
to_contain2 = {'list' => [{'key'=> 'key2', 'value'=> 'value2'}]} 

Event. 
    where("data @> ?", to_contain1.to_json}) 
# returns events 1 & 2 

Event. 
    where("data @> ?", to_contain1.to_json). 
    where("data @> ?", to_contain2.to_json) 
# returns event 1