在postgres jsonb数组中查找对象的位置

马特·狄奥尼斯

我在value的jsonb列中有一个看起来像这样的对象数组

"west": [
  {"id": "aa92f346-7a93-4443-949b-4eab0badd983", "version": 1},
  {"id": "cd92e346-6b04-3456-050a-5eeb0bddd027", "version": 3}
]

我的目标是根据其ID和版本从此数组中删除某些对象,如下所示:

SELECT value::jsonb #- '{west, 1}' FROM game.settings;

但是,1不应硬编码,而应使对象在数组中的位置相等,该位置与要查找的id和版本匹配(在这种情况下"id": "cd92e346-6b04-3456-050a-5eeb0bddd027", "version": 3)。

我将如何确定该数组的位置并将其传递到我的硬编码1当前所在的位置?

克林

示例数据:

create temp table settings as
select 
    '{"west": [
      {"id": "aa92f346-7a93-4443-949b-4eab0badd983", "version": 1},
      {"id": "cd92e346-6b04-3456-050a-5eeb0bddd027", "version": 3}
    ]}'::jsonb as value;

您可以jsonb_array_elements() with ordinality用来确定给定元素的数组位置:

select elem, position
from settings, jsonb_array_elements(value->'west') with ordinality arr(elem, position)
where elem->>'id' = 'cd92e346-6b04-3456-050a-5eeb0bddd027';

                             elem                             | position 
--------------------------------------------------------------+----------
 {"id": "cd92e346-6b04-3456-050a-5eeb0bddd027", "version": 3} |        2
(1 row)

用于position从数组中删除对象:

select value #- array['west', (position- 1)::text] new_value
from settings, jsonb_array_elements(value->'west') with ordinality arr(elem, position)
where elem->>'id' = 'cd92e346-6b04-3456-050a-5eeb0bddd027';

                                new_value                                 
--------------------------------------------------------------------------
 {"west": [{"id": "aa92f346-7a93-4443-949b-4eab0badd983", "version": 1}]}
(1 row)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新对象数组Postgres jsonb中的特定对象

来自分类Dev

在postgres中更新jsonb对象

来自分类Dev

在Postgres中查询jsonb数组

来自分类Dev

Postgres-从jsonb数组中删除元素

来自分类Dev

postgres从jsonb数组中删除特定元素

来自分类Dev

使用 postgres 从 jsonb 数组中删除元素

来自分类Dev

了解在数组中查找对象

来自分类Dev

在数组中查找对象

来自分类Dev

Postgres jsonb_insert数组

来自分类Dev

Postgres 中的数组数组

来自分类Dev

在 Postgres 中查询 JSONB 中的复杂数组

来自分类Dev

在Rails中订购Postgres jsonb

来自分类Dev

使用Postgres / Knex在JSONB列中存储对象

来自分类Dev

Rails Postgres如何查询jsonb列中的空对象?

来自分类Dev

Postgres 9.4:在每个jsonb数组结果中包括同级列

来自分类Dev

从Postgres中的嵌套jsonb数组中选择数据

来自分类Dev

Postgres从jsonb数组中获取值匹配的所有元素

来自分类Dev

在Postgres JSONB列中查询多个数组元素

来自分类Dev

在 Postgres 数据库的 JSONB 数组中查询

来自分类Dev

将 jsonb 转换为 postgres 中的常规数组

来自分类Dev

Javascript:在数组中查找对象的索引,不知道索引,仅查找对象

来自分类Dev

Postgres JSONB:数组数组的where子句

来自分类Dev

如何通过对象数组中的id查找对象?

来自分类Dev

如何通过对象数组中的id查找对象?

来自分类Dev

在对象数组中查找对象的索引

来自分类Dev

查找对象数组中对象键 VALUES 的频率

来自分类Dev

创建查询以在对象数组中查找对象

来自分类Dev

如何使用lodash在嵌套的对象数组中查找对象?

来自分类Dev

反向查找对象与数组