简单请求:
a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> Repo.one()
例外:
** (exit) an exception was raised:
** (Ecto.MultipleResultsError) expected at most one result but got 6 in query:
是的,有一些记录,没关系,但我打算拿第一个。为什么例外以及如何解决它?
答案 0 :(得分:4)
为什么例外
Repo.one
总是返回nil或一条记录,如果程序员自己将limit
添加到查询中而不是从数据库中获取更多记录然后抛出除一个之外的所有记录,那会更好。< / p>
如何解决?
您可以使用limit(1)
:
a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> limit(1) |> Repo.one()
请注意,如果没有order
,则返回的记录通常在大多数数据库中未定义。您可以按id
订购,以获取最低id
的记录:
a1 = where(MyModel, [x], is_nil(x.some_foreign_id)) |> order_by(:id) |> limit(1) |> Repo.one()