我确实想出了如何从单个记录的数组中删除一个值,但是如何为其中的许多记录执行此操作。问题在于我如何使用子查询。因为它必须只返回单个元素。也许我的方法是错误的。

给定输入:'{attributes:['is_new', 'is_old']}'
预期结果 '{attributes: ['is_old']}' #remove 'is_new' 从 jsonb 数组


真实例子:
# sku |特性
# -------+--------------------------------
# nu3_1 | { +
# | "name": "silly_hodgkin", +
# | "类型": "食物", +
# | “属性”:[ +
# | "is_gluten_free", +
# | "is_lactose_free", +
# | "is_new"+
# | ] +
# | }


#Query 删除单个数组元素:

选择 c.sku, jsonb_agg(el) FROM
目录 c JOIN (选择 sku, jsonb_array_elements_text(properties->'attributes') as el from catalog) c2 ON c.sku=c2.sku where el 'is_new'
按 c.sku 分组;

#更新查询,删除单个记录中的单个数组元素

更新目录 SET properties=jsonb_set(properties, '{attributes}', (
选择 jsonb_agg(el) 从
目录 c JOIN (选择 sku, jsonb_array_elements_text(properties->'attributes') as el from catalog) c2 ON c.sku=c2.sku
在哪里 el 'is_new' AND c.sku='nu3_1'
GROUP BY c.sku
)
) 哪里 sku='nu3_1';

问题又来了。如何按值删除许多数据库记录的jsonb数组元素?

最佳答案

使用 jsonb_set() and the delete operator - :

update catalog
set properties =
    jsonb_set(properties, '{attributes}', (properties->'attributes') - 'is_new');
db<>fiddle. 中测试

关于arrays - 按值删除jsonb数组元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40285583/

10-16 20:59