PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Postgres-Operatoren für JSON-Datentypen mit Rails 4

Diese Antwort erfordert Postgres 9.4. In Ihrer Beispieldatenstruktur haben Sie Folgendes:

2.1.1 :202 > r.column_data
=> {"data1"=>[1, 2, 3], "data2"=>"data2-3", "array"=>[{"hello"=>1}, {"hi"=>2}]}

Leider funktioniert die Prüfung auf Existenz eines Elements in einem Array (meines Wissens nach) nur mit String-Werten. Wenn wir die folgenden Daten hätten, könnten wir sie problemlos abfragen.

{"data1"=>['1', '2', '3'], "data2"=>"data2-3"}

Lassen Sie uns das testen. Hinweis:Nutzlast ist jsonb. Es funktioniert nicht als JSON-Feld.

Dynamic.create(payload: {"data1"=>['1', '2', '3'], "data2"=>"data2-3"})
Dynamic.where("payload -> 'data1' ? '1'").first
=> #<Dynamic id: 8, payload: {"data1"=>["1", "2", "3"], "data2"=>"data2-3"}, created_at: "2014-12-24 02:30:31", updated_at: "2014-12-24 02:30:31">

Weitere Informationen finden Sie in diesem Artikel