Elixir + Ecto:怎么做[数组]中没有?

时间:2016-12-06 21:32:57

标签: elixir ecto

我正在尝试查找User字段中没有特定字符串元素的所有match_history。我猜了一下:

matched_user = User |> where([u], ^device_id not in u.match_history) |> limit(1) |> VideoChat.Repo.one

但似乎在not部分突破了。有没有办法做到这一点?

2 个答案:

答案 0 :(得分:12)

尝试

User |> where([u], not ^device_id in u.match_history)

答案 1 :(得分:1)

对于那些正在寻找“数组不包含任何”行为的人。
例如“ match_history不包含device_1 device_2,device_3”

鉴于您使用的是PostgreSQL,可以在array contains @> operator中使用一个片段。

from t in queryable, where: not fragment("? @> ?::varchar[]", t.match_history, ^device_ids)

from t in queryable, where: fragment("NOT ? @> ?::varchar[]", t.match_history, ^device_ids)