Consultar columna jsonb que contiene una matriz de objetos JSON
yo sueloPostgreSQL 9.5 y Rails 5. Quiero consultar eljsonb
columna que se muestra a continuación que contiene una matriz de objetos JSON para devolver todos los elementos de la matriz JSON que contienen{"kind":"person"}
y también realizar un recuento.
losSQL Yo uso se muestra debajo de los datos json. La ejecución de la consulta solo devuelve una matriz vacía.
He intentado las consultas sugeridasaquí yaquí.
Esto es lo que mijsonb
los datos se ven así:
'[
{"kind":"person", "filter_term":"56","selected_attr":"customer"},
{"kind":"email", "filter_term":"marketer","selected_attr":"job_title"}
]'
Quiero que devuelva una de las consultas sql:
data
----------------------------------------------------------------------
'{"kind":"person", "filter_term":"56","selected_attr":"customer"}'
(1 row)
y otra consulta para devolver la matriz para que pueda llamar a contar en ella en mi aplicación y también recorrerla para crear formularios:
data
----------------------------------------------------------------------
'[{"kind":"person", "filter_term":"56","selected_attr":"customer"}]'
(1 row)
Intenté esta consulta SQL:
"SELECT * FROM \"segments\" WHERE (payload @> '[{\"kind\":\"person\"}]')"
También probé esta consulta:
"SELECT payload FROM segments WHERE payload @> '[{\"kind\":\"person\"}]'::jsonb;"
Aquí hay una tercera consulta:
"SELECT * FROM segments s WHERE s.payload->'\"#{a}\"' @> '[{\"kind\":\"person\"}]';"
El modelo:
class Segment < ApplicationRecord
store_accessor :payload,:kind, :filter_term, :selected_model_name, :selected_attr, :limit, :selected_operator
end
La migración:
create_table "segments", force: :cascade do |t|
t.jsonb "payload", default: "[]", null: false
t.index ["payload"], name: "index_segments_on_payload", using: :gin
end