这是我的表(简体,仅重要的列):
CREATE TABLE things (
id serial primary key
, name varchar
, blueprint json default '{}'
);
以及一些样本数据:
# select * from things;
id | name | blueprint
----+---------+-----------------------------------------------------------------------------
1 | Thing 1 | {}
2 | Thing 2 | {"1":{"name":"Iskapola","wight":"2"}}
3 | Thing 3 | {"1":{"name":"Azamund","weight":"3"}, "2":{"name":"Iskapola","weight":"1"}}
4 | Thing 4 | {"1":{"name":"Ulamir","weight":"1"}, "2":{"name":"Azamund","weight":"1"}}
我想选择键'Azamund'
下任意位置的行name
。像这样的东西:
# select * from things where * ->> 'name' = 'Azamund';
id | blueprint
----+----------------------------------------------------------------------------
7 | {"1":{"name":"Azamund","weight":"3"}, "2":{"name":"Iskapola","weight":"1"}}
8 | {"1":{"name":"Ulamir","weight":"1"}, "2":{"name":"Azamund","weight":"1"}}
数据完全像样本中一样嵌套(仅一层)。
当前,我们正在使用PostgreSQL 9.3.5。
在PostgreSQL 9.3中可以吗?也许是9.4?
您的查询已关闭。
json_each()
是关键功能。还是jsonb_each()
为了jsonb
。进行了一些改进:
SELECT *
FROM things t
WHERE EXISTS (
SELECT FROM json_each(t.blueprint) b
WHERE b.value->>'name' ILIKE 'azamund'
);
旧的sqlfiddle
db <>
fiddle在这里
json_each()
已经返回该值作为json
数据类型。无需额外的演员表。
更好的是,在中使用LATERAL
引用EXISTS
。这比在SELECT
列表中取消使用设置返回功能要干净得多。
在Postgres 12中使用SQL / JSON可以变得更简单/更高效…
我试图根据嵌套的JSON数组中的值过滤我的GET response(JSON)。例如:在下面的JSON中,我想过滤一个JSON数组,并用巧克力作为面糊打印出蛋糕的名称。 我尝试过这样的事情: 和 两者都返回空列表。
在测试类下面,我想过滤所有部分中的公共语言列表。 例如,测试有药剂列表P1和P2。P1有一个列表 最终输出应该是包含Ja和Zh语言的语言对象列表。
问题内容: 在Django Rest Framework中,当一个序列化器嵌套在另一个序列化器中时,如何过滤它? 我的过滤器被强加在DRF视图集中,但是当您从另一个序列化器内部调用序列化器时,嵌套序列化器的视图集将永远不会被调用,因此嵌套结果看起来是未经过滤的。 我尝试在原始视图集上添加过滤器,但是它似乎无法过滤嵌套结果,因为嵌套结果被称为单独的预提取查询。(您看到嵌套的序列化程序是反向查找。)
问题内容: 我正在尝试过滤存储桶中的嵌套聚合。 对应: 索引数据: 我正在使用此查询和聚合定义 我从聚合结果中得到的是: 我在筛选存储桶列表时遇到了麻烦,因为它们只能提供所提供的事件ID,因此结果应类似于: 问题答案: 您快到了,只需要在聚合中添加过滤器即可,如下所示: 原因是您的查询将正确选择具有指定事件ID的嵌套事件的所有文档,但是,汇总将对所有选定文档中的所有嵌套事件进行处理。因此,您还需要
我有一个类似这样的组对象 和如下所示的Item对象
我有一个映射: 我使用三个条件进行筛选: “日志类型”是“爬虫” “2020-05-23”上的“创建数据” “resp”的大小=0 我试图过滤与查询: {"查询":{"bool":{"必须":[{"术语":{"_logType":{"value":"爬虫"}}},{"范围":{"_createdAt":{"gte":"2020-05-23","lte":"2020-05-23","time_zon