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

TypeORM中如何获取设置了select:false的未选中列?

获取设置了select:false的User实体password字段

你在User实体中将password字段的select属性设为false,这会让TypeORM默认查询时不返回该字段。要在查询时获取password,有以下几种修改方式:

方法1:使用findOne并指定select选项

将findOneBy替换为findOne,通过select数组显式包含需要查询的字段(包括password):

const user = await this.userRepository.findOne({
  where: {
    email: loginInput.email,
    is_verify: true
  },
  select: ["id", "userName", "email", "password"] // 按需列出字段,必须包含password
});
console.log(user);

方法2:使用QueryBuilder构建查询

通过createQueryBuilder手动添加password字段到查询中,这种方式更灵活:

方式A:指定所有需要的字段

const user = await this.userRepository
  .createQueryBuilder("user")
  .select(["user.id", "user.userName", "user.email", "user.password"])
  .where("user.email = :email", { email: loginInput.email })
  .andWhere("user.is_verify = :isVerify", { isVerify: true })
  .getOne();
console.log(user);

方式B:仅追加password字段

如果需要保留默认查询的其他字段,只需单独添加password:

const user = await this.userRepository
  .createQueryBuilder("user")
  .addSelect("user.password")
  .where({
    email: loginInput.email,
    is_verify: true
  })
  .getOne();
console.log(user);

注意事项

  • password属于敏感字段,仅在登录验证等必要场景下查询,避免不必要的返回以降低数据泄露风险。
  • 不建议直接修改实体中select: false为true,这会导致所有默认查询都返回password,存在安全隐患。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:50:19