簡體   English   中英

Elixir Ecto-PostgreSQL jsonb函數

[英]Elixir Ecto - PostgreSQL jsonb Functions

我正在將Ruby on Rails API轉換為Elixir和Phoenix。 在我的Postgres數據庫中,我有一個帶有jsonb列類型的表。 json中的鍵之一是顏色數組。 例如:

{"id": 12312312, "colors": ["Red", "Blue", "White"]}

我想從Ecto進行的工作是查詢我的表以查找包含紅色或藍色的所有記錄。 本質上,重新創建此查詢:

select * from mytable where data->'colors' ?| array['Red', 'Blue']

我在用Ecto構造此查詢時遇到一些困難。 這是我所擁有的:

注意:“值”將是管道分隔的顏色列表

  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"]'

我已經找到解決問題的辦法。

def with_colors(query, value) do
  colors = value 
    |> String.split("|")

  from c in query,
  where: fragment("data->'colors' \\?| ?", ^colors))
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM