相关疑难解决方法(0)

针对多个值的 PostgreSQL JSON 查询数组

我想针对jsonbPostgres中的类型编写一个查询,给定一组客户 ID 将找到相应的组。

鉴于此示例表:

CREATE TABLE grp(d JSONB NOT NULL);

INSERT INTO grp VALUES
   ('{"name":"First","arr":["foo"], "customers":[{"id":"1", "name":"one"},{"id":"2", "name":"two"}]}')
 , ('{"name":"Second","arr":["foo","bar"], "customers":[{"id":"3", "name":"three"},{"id":"4", "name":"four"}]}')
 , ('{"name":"Third","arr":["bar","baz"], "customers":[{"id":"5", "name":"five"},{"id":"6", "name":"seven"}]}');
Run Code Online (Sandbox Code Playgroud)

我发现了类似的问题(针对多个值的 PostgreSql JSONB SELECT)并设法使用此查询在简单数组上实现了我想要的:

SELECT d FROM grp WHERE d->'arr' ?| ARRAY['foo', 'bar'];
Run Code Online (Sandbox Code Playgroud)

但是,当数组包含 JSON对象时,我无法使其工作:

SELECT d FROM grp WHERE d->'customers' ?| ARRAY['{"id":"1"}', '{"id":"5"}'];
Run Code Online (Sandbox Code Playgroud)

这是我对查询的期望:

grp“第一个”-> 客户“1”

grp "第三" -> 客户 "5"

postgresql array json postgresql-9.4

27
推荐指数
1
解决办法
5万
查看次数

如何从 PostgreSQL 中的 jsonb 数组中获取特定对象?

我有一个名为“user”的字段,其中包含一个大致如下所示的 json 数组:

"user"

[{ "_id" : "1", "count" : "4" }, { "_id" : "3", "count": "4"}]
Run Code Online (Sandbox Code Playgroud)

现在我想要一个像这样的查询:

select count from tablename where id = "1"
Run Code Online (Sandbox Code Playgroud)

我无法count从 PostgreSQL 9.4 中的 json 对象数组中获取特定字段。

postgresql array json postgresql-9.4

21
推荐指数
1
解决办法
7万
查看次数

jsonb_array_elements() 失败并显示“错误:无法从对象中提取元素”

使用:Postgres 14.2。
目标:获取表中所有不同国家/地区的列表。

该列address是一种JSONB列类型,包含一个结构如下的数组:

{
   "address":[
      {
         "types":["route"],
         "long_name":"20203 113B Ave",
         "short_name":"20203 113B Ave"
      },
      {
         "types":["locality","political"],
         "long_name":"Maple Ridge",
         "short_name":"Maple Ridge"
      },
      {
         "types":["administrative_area_level_3","political"],
         "long_name":"Maple Ridge",
         "short_name":"Maple Ridge"
      },
      {
         "types":["administrative_area_level_2","political"],
         "long_name":"Greater Vancouver",
         "short_name":"Greater Vancouver"
      },
      {
         "types":["administrative_area_level_1","political"],
         "long_name":"British Columbia",
         "short_name":"BC"
      },
      {
         "types":["country","political"],
         "long_name":"Canada",
         "short_name":"CA"
      },
      {
         "types":["postal_code"],
         "long_name":"V2X 0Z1",
         "short_name":"V2X 0Z1"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

如何过滤这个对象数组,使其仅返回数组索引(如果包含)的值"long_name"(例如) ?Canadatypes"country"

我正在尝试类似的事情,但显然,我只想返回国家/地区,而不是整个品牌。

SELECT * from brand
where address::text ilike ANY (ARRAY['%country%'::text]);
Run Code Online (Sandbox Code Playgroud)

此查询失败并显示:

{
   "address":[ …
Run Code Online (Sandbox Code Playgroud)

postgresql json json-path jsonb

8
推荐指数
1
解决办法
2万
查看次数

标签 统计

json ×3

postgresql ×3

array ×2

postgresql-9.4 ×2

json-path ×1

jsonb ×1