1
私はRuby on Rails APIをElixirとPhoenixに変換しています。私のPostgresデータベースには、jsonbのカラムタイプのテーブルがあります。 jsonのキーの1つは色の配列です。たとえば、:Elixir Ecto - PostgreSQL jsonb関数
{"id": 12312312, "colors": ["Red", "Blue", "White"]}
私がEctoからやりたいことは、赤または青の色を含むすべてのレコードを照会することです。基本的に、このクエリを再作成します。
select * from mytable where data->'colors' ?| array['Red', 'Blue']
私はエクトでこのクエリを構築するいくつかの困難を抱えています。ここで私が持っているものです。
注:「値」は予想通りこれは現在動作していない色
def with_colors(query, value) do
colors = value
|> String.split("|")
|> Enum.map(fn(x) -> "'#{x}'" end)
|> Enum.join(", ")
# colors should look like "'Red', 'Blue'"
from c in query,
where: fragment("data->'colors' \\?| array[?]", ^colors))
end
のパイプで区切られたリストになります。私は、私のフィールドの周りに別の引用符を囲むように見えるので、置換の疑問符に問題があります。このフラグメントを使用する適切な方法は何ですか?それとももっと良い方法がありますか?
私もこのクエリを再作成する必要がありますするつもりですので、私は再びこの問題に遭遇するつもりです:
select * from mytable where data->'colors' @> '["Red", "Blue"]'