Tenho um jsonb
salvo em um banco de dados PostgreSQL que tem a estrutura:
{
"foo": {
"key0": {
"bar": "myValueA",
},
"key1": {
"bar": "myValueB",
}
// ...
"keyN": {
"bar": "myValueN",
}
}
}
Gostaria de pegar todos os registros que possuem o texto "myValueX"
entre todos os caminhos'foo' > ANY_KEY > 'bar'
Pode ser 'foo' > 'key0' > 'bar'
ou 'foo' > 'key1' > 'bar'
ou qualquer keyN
.
No "pseudo" PostgreSQL:
SELECT * FROM "myTable" WHERE "myColumn" #>> '{foo,*,bar}' = 'myValue';
onde *
significaria "pode ser qualquer chave" .
Existe uma maneira de conseguir tal consulta?
Não é pseudo PostgreSQL , é apenas PostgreSQL JSONPath . O
@@
operador funciona exatamente assim: demo@@
é suportado por GINjsonb_ops
ejsonb_path_ops
, então você pode acelerar com um índice: