列的结构是>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"}}'