sim*_*man 8 arrays postgresql json jsonb
我确实弄清楚如何从一个数组中删除单个记录的值,但是如何为其中许多记录删除它.问题在于我如何使用子查询.因为它必须只返回单个元素.也许我的方法是错的.
Given input: '{attributes:['is_new', 'is_old']}'
Expected result '{attributes: ['is_old']}' #remove 'is_new' from jsonb array
Real example:
# sku | properties
# -------+--------------------------------
# nu3_1 | { +
# | "name": "silly_hodgkin", +
# | "type": "food", +
# | "attributes": [ +
# | "is_gluten_free", +
# | "is_lactose_free", +
# | "is_new" +
# | ] +
# | }
#Query that removes single array element: SELECT c.sku, jsonb_agg(el) FROM catalog c JOIN (select sku, jsonb_array_elements_text(properties->'attributes') as el from catalog) c2 ON c.sku=c2.sku where el 'is_new' GROUP BY c.sku;
#Update query that removes single array element in single record
UPDATE catalog SET properties=jsonb_set(properties, '{attributes}', (
SELECT jsonb_agg(el) FROM
catalog c JOIN (select sku, jsonb_array_elements_text(properties->'attributes') as el from catalog) c2 ON c.sku=c2.sku
WHERE el 'is_new' AND c.sku='nu3_1'
GROUP BY c.sku
)
) WHERE sku='nu3_1';
问题是.如何为许多数据库记录的值删除jsonb数组元素?
kli*_*lin 14
update catalog
set properties =
jsonb_set(properties, '{attributes}', (properties->'attributes') - 'is_new');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6086 次 |
| 最近记录: |