私はPostgres(Amazon RDSの9.6)でJSONデータ構造を照会しようとしています。データにはオブジェクトの配列が含まれ、オブジェクトの配列を含む要素があります。これらのネストされた配列のいずれかでキー+値と一致するすべてのレコードを検索したいと思います。このようなPostgresでネストされた配列を使用してJSONを効率的に照会する
考える行:
{"drinkers" : [
{"name" : "geoff",
"beers" : [
{"name": "PBR"},
{"name" : "Bud Select"}
]},
{"name" : "tom",
"beers" : [
{"name": "Bud Light"},
{"name" : "Busch"}
]}
]}
私は名前は、「PBR」であるのですdrinkers.beersオブジェクトがありますすべての行を検索します。私が来た最も近いがこれです:
select jsonb_data
from bars
where jsonb_array_elements(jsonb_array_elements(data -> 'drinkers') -> 'beers') ->> 'name' = 'PBR'``
しかし、ここではその代わりに一致する真/偽単一のリストを返しますので、これは動作しません。私は、サブクエリ、ラテラルジョインなどを使用して他のソリューションを考え出しましたが、これらのソリューションはすべて、適切なジンインデックスを使用してもパフォーマンスの問題があります。 Postgresでこのようなデータ構造をどのように問い合わせるかについての提案はありますか?
[ArrayField内部ジャンゴJSONField]の可能な重複(https://stackoverflow.com/questions/41134260/django-:別のアプローチは、JSONB
contain
(すなわち@>
)を使用することであろうjsonfield-inside-arrayfield) – e4c5