Heim > Datenbank > MySQL-Tutorial > Wie kann ich bestimmte Elemente in JSON-Arrays in PostgreSQL abfragen?

Wie kann ich bestimmte Elemente in JSON-Arrays in PostgreSQL abfragen?

DDD
Freigeben: 2025-01-15 10:12:42
Original
813 Leute haben es durchsucht

How Can I Query Specific Elements Within JSON Arrays in PostgreSQL?

JSON-Array-Elemente in PostgreSQL abfragen

PostgreSQL 9.3 und höher unterstützt den JSON-Datentyp, sodass JSON-Daten in der Datenbank gespeichert und bearbeitet werden können. Mit dieser Funktion können komplexe Datenstrukturen (z. B. Arrays von Objekten) in einer einzigen Spalte gespeichert werden. Allerdings kann die Abfrage nach bestimmten Elementen oder Werten innerhalb dieser komplexen Strukturen eine Herausforderung darstellen.

Angenommen, die Spalte mit dem Namen „data“ in der Tabelle „reports“ speichert die folgenden JSON-Daten:

<code class="language-json">{
  "objects": [
    {"src":"foo.png"},
    {"src":"bar.png"}
  ],
  "background":"background.png"
}</code>
Nach dem Login kopieren

Eine häufige Aufgabe besteht darin, alle Berichte abzurufen, die einen bestimmten Wert aus dem Feld „src“ des Arrays „objects“ enthalten. Das Abfragen eines flachen JSON-Felds wie „Hintergrund“ ist einfach, aber das Extrahieren von Elementen in einem Array erfordert einen anderen Ansatz.

Die folgende Abfrage ruft erfolgreich alle Berichte ab, die dem angegebenen „Hintergrund“-Wert entsprechen:

<code class="language-sql">SELECT data AS data FROM reports WHERE data->>'background' = 'background.png'</code>
Nach dem Login kopieren

Versuchen Sie jedoch, Werte im Array „objects“ mit einer ähnlichen Syntax abzufragen (zum Beispiel):

<code class="language-sql">SELECT data AS data FROM reports WHERE data->>'objects' = 'foo.png'</code>
Nach dem Login kopieren

führt nicht zu den erwarteten Ergebnissen, da es sich bei „Objekten“ um Arrays und nicht um einfache Felder handelt.

Um Elemente in einem JSON-Array erfolgreich abzufragen, können Sie die Funktion json_array_elements() in einem horizontalen Join verwenden. Diese Funktion extrahiert ein einzelnes Element aus einem Array, sodass Sie jedes Element einzeln testen können.

Die folgende Abfrage verwendet einen lateralen Join, um das Array „objects“ zu erweitern und das Vorhandensein eines bestimmten „src“-Werts zu testen:

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

Alternativ können Sie für eine einzelne Verschachtelungsebene eine vereinfachte Version der Abfrage verwenden:

<code class="language-sql">SELECT *
FROM reports r, json_array_elements(r.data->>'objects') obj
WHERE obj->>'src' = 'foo.png';</code>
Nach dem Login kopieren

Diese Abfragen verwenden die Operatoren #>, -> und ->>, um die JSON-Struktur zu durchlaufen. Einzelheiten zu diesen Operatoren finden Sie in der PostgreSQL-Dokumentation.

Um die Leistung komplexer JSON-Abfragen mit Arrays zu optimieren, sollten Sie darüber hinaus das Hinzufügen eines GIN-Index für den relevanten JSON-Ausdruck in Betracht ziehen. Dies kann insbesondere bei großen Datenmengen die Suchgeschwindigkeit deutlich verbessern.

Das obige ist der detaillierte Inhalt vonWie kann ich bestimmte Elemente in JSON-Arrays in PostgreSQL abfragen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage