检查数组对象作为 WHERE 子句的一部分

Check Array Object as Part of WHERE Clause

我正在使用 postgres 9.4 和 jsonb 类型。我有以下 table:

CREATE TABLE jsonb_test (iid serial NOT NULL, data jsonb)

以及 table 中的以下 json 数据:

{"date": "2016-01-01T00:00:00.000Z", "items": [{"name": "bottles", "price": 12}, {"name": "caps", "price": 20}], "customer": {"name": "Customer 1", "email": "customer1@gmail.com"}}
{"date": "2015-12-01T00:00:00.000Z", "items": [{"name": "bottles", "price": 1}, {"name": "caps", "price": 50}], "customer": {"name": "Customer 2", "email": "customer2@gmail.com"}}

我想做的是获取所有包含价格大于 30 的商品的行。在这种情况下,return 客户 2 行。

到目前为止,这是我的查询:

SELECT * FROM jsonb_test WHERE jsonb_array_elements(jsonb_extract_path(data, 'items')) #> '{price}' > '0'

但这失败并出现错误 ERROR: argument of WHERE must not return a set

谁能告诉我该怎么做?是否可以针对任意级别的嵌套执行此操作?

谢谢!

尝试这样的事情:

SELECT * FROM jsonb_test, jsonb_array_elements(jsonb_test.data->'items') AS a WHERE (a->>'price') > '0'

试试这个 :

SELECT * FROM json_test WHERE jsonb_test.data #> '{items,price}' > '30';

我想做的是:给我对象,其中元素项有一个子对象,该子对象的元素价格等于整数“1”。

在此处查看一些示例:http://schinckel.net/2014/05/25/querying-json-in-postgres/