元素假設在PostgreSQL的9.3以下架構:PostgeSQL:如何檢查是否有任何的JSON陣列匹配標準
create table test (data json);
insert into test values ('{
"id" : 1,
"name" : "abc",
"values" : [{"id" : 2, "name" : "cde"}, {"id" : 3, "name" : "def"}]
}'::json);
insert into test values ('{
"id" : 4,
"name" : "efg",
"values" : [{"id" : 5, "name" : "fgh"}, {"id" : 6, "name" : "ghi"}]
}'::json);
什麼是查詢文件的對象,其中至少一個最好的辦法在「值」數組滿足條件?我能想到的唯一方法是:
select data
from (select
data,
json_array_elements(data->'values')->>'name' as valueName
from test) a
where valueName = 'ghi';
有沒有辦法做到這一點沒有嵌套查詢?在MongoDB中我可以簡單地說:
db.test.find({values : {$elemMatch : {name : "ghi"}}});
您可以將最新版本的Postgres用於JSON,但效率不及普通列上的索引。 –
我接受了你的答案,儘管會質疑你對PostgreSQL的觀點僅限於關係模型。使用hstore數據類型,您可以將其用於存儲半結構化文檔。 – Muton
但是,好吧,它不能用作文件存儲,但它看起來,這是我在這裏評估,但有希望:http://www.sai.msu.su/~megera/postgres/talks/hstore- dublin-2013.pdf – Muton