【发布时间】:2020-02-12 11:19:09
【问题描述】:
我的 Postgres 上有以下 json 结构。该表名为“customers”,包含 json 的字段名为“data”
{
customerId: 1,
something: "..."
list: [{ nestedId: 1, attribute: "a" }, { nestedId: 2, attribute: "b" }]
}
我正在尝试查询所有在“list”字段中具有nestedId = 1 元素的客户。
我通过查询完成的很糟糕:
SELECT data FROM customers a, jsonb_array_elements(data->'list') e WHERE (e->'nestedId')::int = 1
我说的不好,因为我在FROM子句上使用了jsonb_array_elements,所以没有用作过滤器,导致seq扫描。
我尝试了类似的方法:
SELECT data FROM customers where data->'list' @> '{"nestedId": 1, attribute: "a"}'::jsonb
但它不返回任何东西。我想是因为“列表”字段被视为一个数组,而不是我的每种记录类型。
任何想法如何在 WHERE 条件下执行查询过滤nestedId?
【问题讨论】:
标签: json postgresql jsonb