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

TypeORM不用createQueryBuilder能否通过Find Options实现addSelect

结论

截止TypeORM当前0.3.x稳定版,你期望的find({ addSelect: ["address"] })写法无法实现同等效果,Find Options原生不支持追加选择隐藏字段的配置项。

原因

TypeORM Find Options里的select参数是全量覆盖规则,不是追加规则:只要配置了select,查询时就只会返回你列在数组里的字段,原本默认会查询的非隐藏字段不会自动带出,和createQueryBuilder的addSelect追加逻辑完全不一样。
如果你直接写select: ["address"],最终返回结果只会剩address字段,id、房产名称、价格这些常规字段全都会丢。要是硬凑Find Options的写法,你得把所有需要返回的字段全手动列在select数组里,后续实体加字段减字段都得同步改这段代码,维护成本很高,完全没必要:

// 不推荐,维护成本极高
const properties = await this.repository.find({
  select: ["id", "title", "price", "coverUrl", "area", "address" /* 剩下所有需要返回的字段都得挨个列 */]
});
建议

你现在用createQueryBuilder写的allWithLocation实现就是TypeORM官方推荐的查询select: false隐藏字段的标准方案,没有额外性能开销,逻辑清晰,完全不需要强行换成Find Options写法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:57:28