如何通过WHERE json语句postgres过滤数据



列的结构是>SELECT "startedByAttendanceEntry" FROM "attendance_block"

[
{
person: {
firstName: "Koste";
lastName: "Litaci";
};
}
...
]

数据类型是json,我不能更改类型或数据库的任何结构

我想要实现的是只选择person firstName=Koste AND lastName=Litaci 的元素

我试过什么

SELECT "startedByAttendanceEntry" 
FROM "attendance_block" 
WHERE 'person' ->> 'lastName' = 'Litaci' 
AND 'person' ->> 'firstName' = 'Koste'

更多的人都以错误的说法driverError: error: operator is not unique: unknown ->> unknown结束

好吧,'person'是一个varchar/text常量,因此您不能在它上应用JSON运算符。此外,您的JSON包含一个数组,因此通过->>访问也不起作用,因为您需要指定数组索引。

可以使用包含运算符@>在数组中查找特定的键/值对。由于您选择不使用推荐的jsonb类型,因此需要强制转换列:

where "startedByAttendanceEntry"::jsonb @> '[{"person":{"firstName": "Koste", "lastName": "Litaci"}}]'

主题作者编辑:

所有工作代码如下

SELECT "startedByAttendanceEntry" 
FROM "attendance_block" 
WHERE "startedByAttendanceEntry"::jsonb @> '{"person":{"firstName": "Koste", "lastName": "Litaci"}}'

最新更新