Query jsonb-Spalte mit einem Array von JSON-Objekten
Ich benutzePostgreSQL 9.5 und Rails 5. Ich möchte das @ abfragjsonb
ie unten gezeigte @ -Spalte enthält ein Array von JSON-Objekten, um alle JSON-Array-Elemente zurückzugeben, die @ enthalte{"kind":"person"}
und auch eine Zählung durchführen.
Das SQL, Das ich benutze, wird unter den json Daten gezeigt. Das Ausführen der Abfrage gibt nur ein leeres Array zurück.
Ich habe die vorgeschlagenen Abfragen ausprobiertHie undHie.
Das ist was meinjsonb
data sieht so aus:
'[
{"kind":"person", "filter_term":"56","selected_attr":"customer"},
{"kind":"email", "filter_term":"marketer","selected_attr":"job_title"}
]'
Ich möchte, dass eine der SQL-Abfragen Folgendes zurückgibt:
data
----------------------------------------------------------------------
'{"kind":"person", "filter_term":"56","selected_attr":"customer"}'
(1 row)
und eine weitere Abfrage, um das Array zurückzugeben, damit ich in meiner App darauf zählen und es auch durchlaufen kann, um Formulare zu erstellen:
data
----------------------------------------------------------------------
'[{"kind":"person", "filter_term":"56","selected_attr":"customer"}]'
(1 row)
Ich habe versucht, diese SQL-Abfrage:
"SELECT * FROM \"segments\" WHERE (payload @> '[{\"kind\":\"person\"}]')"
Ich habe auch versucht, diese Abfrage:
"SELECT payload FROM segments WHERE payload @> '[{\"kind\":\"person\"}]'::jsonb;"
Hier ist eine 3. Frage:
"SELECT * FROM segments s WHERE s.payload->'\"#{a}\"' @> '[{\"kind\":\"person\"}]';"
Das Model
class Segment < ApplicationRecord
store_accessor :payload,:kind, :filter_term, :selected_model_name, :selected_attr, :limit, :selected_operator
end
Die Migration:
create_table "segments", force: :cascade do |t|
t.jsonb "payload", default: "[]", null: false
t.index ["payload"], name: "index_segments_on_payload", using: :gin
end