sql >> データベース >  >> RDS >> PostgreSQL

PostgresJSONデータ型Railsクエリ

    これにつまずく人のために。 ActiveRecordとPostgresのJSONデータ型を使用したクエリのリストを考え出しました。わかりやすくするために、これを自由に編集してください。

    以下で使用されるJSON演算子のドキュメント:https://www.postgresql.org/docs/current/functions-json.html。

    # Sort based on the Hstore data:
    Post.order("data->'hello' DESC")
    => #<ActiveRecord::Relation [
        #<Post id: 4, data: {"hi"=>"23", "hello"=>"22"}>, 
        #<Post id: 3, data: {"hi"=>"13", "hello"=>"21"}>, 
        #<Post id: 2, data: {"hi"=>"3", "hello"=>"2"}>, 
        #<Post id: 1, data: {"hi"=>"2", "hello"=>"1"}>]> 
    
    # Where inside a JSON object:
    Record.where("data ->> 'likelihood' = '0.89'")
    
    # Example json object:
    r.column_data
    => {"data1"=>[1, 2, 3], 
        "data2"=>"data2-3", 
        "array"=>[{"hello"=>1}, {"hi"=>2}], 
        "nest"=>{"nest1"=>"yes"}} 
    
    # Nested search:
    Record.where("column_data -> 'nest' ->> 'nest1' = 'yes' ")
    
    # Search within array:
    Record.where("column_data #>> '{data1,1}' = '2' ")
    
    # Search within a value that's an array:
    Record.where("column_data #> '{array,0}' ->> 'hello' = '1' ")
    # this only find for one element of the array. 
    
    # All elements:
    Record.where("column_data ->> 'array' LIKE '%hello%' ") # bad
    Record.where("column_data ->> 'array' LIKE ?", "%hello%") # good
    


    1. Oracleの列にあるすべての非数値を検索する

    2. SQLServerでUPDATEパススルークエリを実行する方法

    3. オンライン調査のためのデータベースモデル。パート4

    4. MySQLクエリ-今日から過去30日間の記録