3
我有在JSONB列存儲的數據的表。查詢表的Postgres與JSONB數據
現在,我想要做的是,查詢該表,並獲取記錄,其中有一個關鍵的具體數值。
這工作得很好:
SELECT "documents".*
FROM "documents"
WHERE (data @> '{"type": "foo"}')
但我想要做的是,取表中的所有行,其中有各類foo
OR bar
。
我嘗試這樣做:
SELECT "documents".*
FROM "documents"
WHERE (data @> '{"type": ["foo", "bar"]}')
但這似乎並沒有工作。
我也試過這樣:
SELECT "documents".*
FROM "documents"
WHERE (data->'type' ?| array['foo', 'bar'])
其中一期工程,但如果我指定像這樣data->'type'
關鍵它帶走查詢的動態性。
順便說一句,我使用在Postgres Rails的Ruby的,所以所有的查詢都經歷ActiveRecord
。這就是:
Document.where("data @> ?", query)
謝謝你的迴應@klin。解決方案1可以工作,但我想的是其他方式,因爲Rails是API的一部分,並且可以有任何請求,我不想進入解析參數。所以想到了一些更乾淨的方式,我覺得應該在那裏,因爲這只是一個基本的操作。你怎麼看? –
我知道你的意思,這就是爲什麼我寫了第二個解決方案。沒有更乾淨的一個。 – klin
是的,但屬性可以改變,它不會一直是類型的,所以解析會再次出現。 –