【发布时间】:2021-01-20 21:57:33
【问题描述】:
这是我之前提出的这个问题的后续:Querying an array of objects in JSONB
我有一个表,其中有一列数据类型为 JSONB。列中的每一行都有一个如下所示的 JSON:
[
{"A": {"AA": "something", "AB": false}},
{"B": {"BA":[{"BAAA": [1,2,3,4]},{"BABA": {"one": 42}}]}}
]
注意:JSON 是一堆乱七八糟的列表和对象,总共有 300 行。不是我的数据,但我坚持下去。 :(
我使用的是 postgresql 版本 12
我正在尝试编写一个查询来返回 AA (A->AA) 的值。这是我尝试过的查询:
select data @@ '$[*].A.AA' from test
那只是返回 null。
但是当我运行这个查询时:
select data @@ '$[*].A.AB' from test
它正确返回 false。
问题:
- 为什么查询返回类型为布尔值时返回值,返回类型为文本时返回null?
- 如何编写查询以返回文本?
一些示例数据:https://dbfiddle.uk/?rdbms=postgres_12&fiddle=fec0ba6e9bd6dffb9874e20ef7abab1d
【问题讨论】:
-
运算符
@@返回一个布尔值 - 它测试 JSONPath 表达式是否存在。它不会返回该路径的值。它类似于常规 SQL 中的 EXISTS 条件
标签: sql postgresql jsonb