Heim >Datenbank >MySQL-Tutorial >Wie frage ich nach Übereinstimmungen mit JSON-Array-Elementen in PostgreSQL?

Wie frage ich nach Übereinstimmungen mit JSON-Array-Elementen in PostgreSQL?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-15 10:49:43164Durchsuche

How to Query for JSON Array Element Matches in PostgreSQL?

JSON-Array-Elementübereinstimmung in PostgreSQL abfragen

Der JSON-Datentyp von PostgreSQL kann beim Abfragen bestimmter Elemente in verschachtelten Arrays schwierig sein. Betrachten Sie das folgende Beispiel:

<code>{
  "objects": [{"src":"foo.png"},
{"src":"bar.png"}],
  "background":"background.png"
}</code>

Um die Datensätze abzufragen, deren „src“-Wert mit „foo.png“ im „objects“-Array übereinstimmt, können Sie einen lateralen Join in der FROM-Klausel verwenden.

PostgreSQL 9.3 und höher

Verwenden Sie für PostgreSQL 9.3 und höher die Funktion json_array_elements(), um das Array „objects“ zu erweitern und jedes Element zu testen:

<code class="language-sql">SELECT data::text, obj
FROM   reports r, json_array_elements(r.data#>'{objects}') obj
WHERE  obj->>'src' = 'foo.png';</code>

PostgreSQL 9.4 und höher

In PostgreSQL 9.4 und höher sollten Sie die Funktion jsonb_array_elements() verwenden und einen passenden GIN-Index für den Ausdruck erstellen:

<code class="language-sql">CREATE INDEX reports_data_gin_idx ON reports
USING gin ((data->'objects') jsonb_path_ops);

SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';</code>

Denken Sie daran, dass beim Array-Matching die Elemente in eckige Klammern eingeschlossen werden müssen, während beim normalen Objekt-Matching keine Klammern erforderlich sind. Weitere Details und Problemumgehungen finden Sie in der verlinkten Dokumentation und anderen in der Frage bereitgestellten Ressourcen.

Das obige ist der detaillierte Inhalt vonWie frage ich nach Übereinstimmungen mit JSON-Array-Elementen in PostgreSQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn