TypeORM的findOne方法是否支持类似MongoDB的投影功能?
TypeORM findOne 投影功能实现方法
当然可以实现只提取指定字段的需求!TypeORM 的 findOne 方法完全支持投影(Projection),不过你给出的参数格式不对,我来给你讲正确的写法:
正确使用方式
不管你用的是 TypeORM 0.3.x 还是更早的版本,核心都是通过 select 选项来指定要返回的字段,只是参数结构略有区别:
TypeORM 0.3.x+ 版本
在新版本中,findOne 只接受一个配置对象,查询条件放在 where 属性里,投影字段放在 select 属性中:
const user = await repository.findOne({ where: { email: 'abc@abc.com' }, select: ['id'] // 这里指定只返回id字段 });
TypeORM 0.2.x 版本
旧版本的 findOne 支持两个参数,第一个是查询条件,第二个是配置对象:
const user = await repository.findOne( { email: 'abc@abc.com' }, { select: ['id'] } );
效果说明
这样执行后,返回的 user 对象只会包含 id 属性,不会返回其他用户信息(比如密码、昵称这些你不需要的字段),既能减少数据库查询的数据量,也能避免敏感字段泄露。
需要注意的是,select 数组里的字段名必须和你定义的实体类中的属性名完全一致,比如实体里如果定义的是 userId,那就要写 ['userId'] 哦。
内容的提问来源于stack exchange,提问作者Ajinkya Ganoo
相关产品推荐
相关产品推荐

