You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Ecto提取表内全部主键且不获取其他冗余字段

Ecto仅提取单个指定字段的实现方案

Ecto提供原生的查询语法支持仅拉取指定字段,不会查询表内其他多余数据,比拉取全量数据后再用Map.take过滤的性能高很多,两种常用实现方式如下:

  • 方案1:直接获取字段值的一维列表
    如果只需要主键(或其他指定字段)的纯值列表,直接在查询中指定select对应字段即可,示例如下(以Schema为User、主键为id为例):
# 最终生成的SQL仅查询id字段,返回 [1,2,3...] 格式的列表
user_ids =
  from u in User,
    select: u.id
  |> Repo.all()

如果需要动态传入字段名,可以用field/2函数实现:

target_field = :id
result =
  from u in User,
    select: field(u, ^target_field)
  |> Repo.all()
  • 方案2:获取仅包含指定字段的结构体/Map
    如果需要保留结构体/Map的格式,仅过滤掉不需要的字段,可以用map/2函数实现:
# 返回 [%{id: 1}, %{id: 2}...] 格式的列表,仅保留指定字段
user_id_list =
  from u in User,
    select: map(u, [:id])
  |> Repo.all()

内容的提问来源于stack exchange,提问作者Drathier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:06:04