我正在尝试查找User
字段中没有特定字符串元素的所有match_history
。我猜了一下:
matched_user = User |> where([u], ^device_id not in u.match_history) |> limit(1) |> VideoChat.Repo.one
但似乎在not
部分突破了。有没有办法做到这一点?
答案 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)