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