Postgresql查询JSONB字段中的对象数组过滤特定对象
Postgresql query array of objects in JSONB field filter Specific Object
CREATE TABLE company (id SERIAL, companyJson JSONB);
CREATE INDEX comapny_gin_idx ON company USING gin (companyJson);
INSERT INTO company (id, companyJson)
VALUES (1, '[{"name": "t", "company": "company1"}]');
INSERT INTO company (id, companyJson)
VALUES (2, '[{"name": "b", "company":"company2"}, {"name": "b", "company":"company3"}]');
SELECT * FROM company WHERE companyJson @> '[{"company": "company2" , "name": "b"}]';
以上程序的输出是
2 [{"name": "b", "company": "company2"}, {"name": "b", "company": "company3"}]
有没有 return {"name": "b", "company": "company2"} 而不是整行。
我只能想到取消嵌套数组和 return 中的元素:
SELECT x.j
FROM company c
cross join jsonb_array_elements(c.companyjson) as x(j)
where x.j = '{"company": "company2" , "name": "b"}'
您可以通过 companyJson -> 0
直接 return 第一个组件,其中包含 ->
操作数 return 通过参数零对第一个组件进行处理:
SELECT companyJson -> 0 as companyJson
FROM company
WHERE companyJson @> '[{"company": "company2" , "name": "b"}]';
CREATE TABLE company (id SERIAL, companyJson JSONB);
CREATE INDEX comapny_gin_idx ON company USING gin (companyJson);
INSERT INTO company (id, companyJson)
VALUES (1, '[{"name": "t", "company": "company1"}]');
INSERT INTO company (id, companyJson)
VALUES (2, '[{"name": "b", "company":"company2"}, {"name": "b", "company":"company3"}]');
SELECT * FROM company WHERE companyJson @> '[{"company": "company2" , "name": "b"}]';
以上程序的输出是
2 [{"name": "b", "company": "company2"}, {"name": "b", "company": "company3"}]
有没有 return {"name": "b", "company": "company2"} 而不是整行。
我只能想到取消嵌套数组和 return 中的元素:
SELECT x.j
FROM company c
cross join jsonb_array_elements(c.companyjson) as x(j)
where x.j = '{"company": "company2" , "name": "b"}'
您可以通过 companyJson -> 0
直接 return 第一个组件,其中包含 ->
操作数 return 通过参数零对第一个组件进行处理:
SELECT companyJson -> 0 as companyJson
FROM company
WHERE companyJson @> '[{"company": "company2" , "name": "b"}]';