jsonb列中对象数组中属性的筛选器



在我的postgresql数据库中,我有一个jsonb列,它按如下方式存储数据。

"Info": {
"Groups": [
{
"Name": "grp1",
"Type": "Simple"
"Users": [
{
"FirstName": "John"
}
]
}
]
}

它基本上是一个Group对象数组,另一个对象数组属性为Users

我可以使用";JsonContains";操作员,例如

-- get all groups with Type = "Simple"
WHERE attrs#>'Info,Groups' @> '[{"Type": "Simple"}]'

然而,我似乎不知道如何获得所有用户名为John的用户组。

以下是我尝试过的(不起作用(

WHERE attrs#>'Info,Groups,Users' @> '[{"FirstName": "John"}]'

非常感谢您的帮助。注意,我目前运行的是PostgreSQL 10.7版

Users是一个数组,因此您需要为包含运算符提供另一个数组:

WHERE attrs #> '{Info,Groups}' @> '[{"Users": [{"FirstName": "John"}]}]'

或者,您可以使用JSON路径条件:

WHERE attrs #> '{Info,Groups}' @@ '$.Users[*].FirstName == "John"'

最新更新