Query jsonb-Spalte mit einem Array von JSON-Objekten

Ich benutzePostgreSQL 9.5 und Rails 5. Ich möchte das @ abfragjsonbie 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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage