第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查詢JSON類型中的數(shù)組元素

查詢JSON類型中的數(shù)組元素

慕斯王 2019-08-31 11:17:29
我正在嘗試測試jsonPostgreSQL 9.3中的類型。我在一個json名為data的表中調(diào)用了一列reports。JSON看起來像這樣:{  "objects": [    {"src":"foo.png"},    {"src":"bar.png"}  ],  "background":"background.png"}我想在表中查詢與'objects'數(shù)組中'src'值匹配的所有報告。例如,是否可以在數(shù)據(jù)庫中查詢匹配的所有報告'src' = 'foo.png'?我成功寫了一個可以匹配的查詢"background":SELECT data AS data FROM reports where data->>'background' = 'background.png'但由于"objects"有一系列的價值觀,我似乎無法寫出有用的東西。是否可以在數(shù)據(jù)庫中查詢匹配的所有報告'src' = 'foo.png'?我查看了這些來源,但仍然無法得到它:http://www.postgresql.org/docs/9.3/static/functions-json.html如何使用新的PostgreSQL JSON數(shù)據(jù)類型中的字段進行查詢?http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/我也嘗試過這樣的事情,但無濟于事:SELECT json_array_elements(data->'objects') AS data from reportsWHERE  data->>'src' = 'foo.png';我不是SQL專家,所以我不知道我做錯了什么。
查看完整描述

2 回答

?
qq_遁去的一_1

TA貢獻1725條經(jīng)驗 獲得超8個贊

json 在Postgres 9.3+

使用子句json_array_elements()中的橫向連接中的函數(shù)來對JSON數(shù)組進行Unnest FROM并測試其元素:


WITH reports(data) AS (

   VALUES ('{"objects":[{"src":"foo.png"}, {"src":"bar.png"}]

           , "background":"background.png"}'::json)

   ) 

SELECT *

FROM   reports r, json_array_elements(r.data#>'{objects}') obj

WHERE  obj->>'src' = 'foo.png';

該CTE(WITH查詢)只是替代了一張桌子reports。

或者,相當(dāng)于只是一個單一的嵌套層次:


SELECT *

FROM   reports r, json_array_elements(r.data->'objects') obj

WHERE  obj->>'src' = 'foo.png';

->>,->和#>運營商的說明書中介紹。


兩個查詢都使用隱式JOIN LATERAL。


SQL小提琴。


密切相關(guān)的答案:


在JSON列中查詢數(shù)組元素

jsonb 在Postgres 9.4+

使用等效的jsonb_array_elements()。


更好的是,使用新的“包含”運算符@>(最好結(jié)合表達式上匹配的GIN索引data->'objects'):


CREATE INDEX reports_data_gin_idx ON reports

USING gin ((data->'objects') jsonb_path_ops);


SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';

由于密鑰objects包含JSON 數(shù)組,因此我們需要匹配搜索項中的結(jié)構(gòu)并將數(shù)組元素包裝到方括號中。搜索普通記錄時刪除數(shù)組括號。


詳細說明和更多選項:


用于在JSON數(shù)組中查找元素的索引


查看完整回答
反對 回復(fù) 2019-08-31
  • 2 回答
  • 0 關(guān)注
  • 959 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號