我保存jsonb
在 PostgreSQL 数据库中,其结构如下:
{
"foo": {
"key0": {
"bar": "myValueA",
},
"key1": {
"bar": "myValueB",
}
// ...
"keyN": {
"bar": "myValueN",
}
}
}
我想获取"myValueX"
所有路径中包含文本的所有记录'foo' > ANY_KEY > 'bar'
它可以是'foo' > 'key0' > 'bar'
或'foo' > 'key1' > 'bar'
或任何keyN
。
在“伪” PostgreSQL 中:
SELECT * FROM "myTable" WHERE "myColumn" #>> '{foo,*,bar}' = 'myValue';
其中的*
意思是“可以是任何键”。
有没有办法实现这样的查询?
它不是伪 PostgreSQL,它只是 PostgreSQL JSONPath。该
@@
运算符的工作方式与以下完全一样:demo@@
GINjsonb_ops
和jsonb_path_ops
都支持,所以你可以通过索引来加速: