Ecto 查询 - jsonb 列中的 order_by 字段
Ecto query - order_by field in jsonb column
当按 created_at 列排序 Ecto 查询时,以下代码工作正常。
sort_params = [asc: :created_at]
query = from user in users,
order_by: ^sort_params,
limit: ^page_size,
offset: ^offset
假设我有一个名为 info 的 jsonb 类型的数据库列,并且 JSON 对象中的字段之一是 "status",是否有按该字段排序的方法?
Ecto 是否有类似
的有效等价物
sort_params = [asc: :info.status]
是的,
您可以使用 Ecto.Query.API.fragment/1。
# you can use fragment/1 only directly in the query
query = from user in users,
order_by: fragment("info->>'status' ASC"),
limit: ^page_size,
offset: ^offset
当按 created_at 列排序 Ecto 查询时,以下代码工作正常。
sort_params = [asc: :created_at]
query = from user in users,
order_by: ^sort_params,
limit: ^page_size,
offset: ^offset
假设我有一个名为 info 的 jsonb 类型的数据库列,并且 JSON 对象中的字段之一是 "status",是否有按该字段排序的方法? Ecto 是否有类似
的有效等价物sort_params = [asc: :info.status]
是的,
您可以使用 Ecto.Query.API.fragment/1。
# you can use fragment/1 only directly in the query
query = from user in users,
order_by: fragment("info->>'status' ASC"),
limit: ^page_size,
offset: ^offset