在PostgreSQL中查詢JSON數組元素匹配
PostgreSQL的JSON資料類型在查詢巢狀數組中的特定元素時可能比較棘手。考慮以下範例:
<code>{ "objects": [{"src":"foo.png"}, {"src":"bar.png"}], "background":"background.png" }</code>
為了查詢「objects」陣列中「src」值符合「foo.png」的記錄,可以在FROM子句中使用橫向連接。
PostgreSQL 9.3以上版本
對於PostgreSQL 9.3以上版本,使用json_array_elements()
函數展開「objects」陣列並測試每個元素:
<code class="language-sql">SELECT data::text, obj FROM reports r, json_array_elements(r.data#>'{objects}') obj WHERE obj->>'src' = 'foo.png';</code>
PostgreSQL 9.4以上版本
在PostgreSQL 9.4以上版本中,應該使用jsonb_array_elements()
函數,並對表達式建立匹配的GIN索引:
<code class="language-sql">CREATE INDEX reports_data_gin_idx ON reports USING gin ((data->'objects') jsonb_path_ops); SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';</code>
請記住,對於數組匹配,需要用方括號括起元素,而普通的物件匹配不需要括號。如需更多詳細資訊和替代方法,請參閱問題中提供的連結文件和其他資源。
以上是如何在 PostgreSQL 中查詢 JSON 陣列元素匹配?的詳細內容。更多資訊請關注PHP中文網其他相關文章!