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

TypeORM findOneBy查询返回NotFound问题求助

问题原因与解决方案

核心错误:MongoDB与SQL注解混用导致字段类型不匹配

你的实体类注解存在关键错误,混淆了SQL和MongoDB的字段映射规则,导致查询时类型不匹配,无法找到记录。

具体问题分析

  1. 错误的字段注解

    • 你给_id属性使用了SQL专属的@PrimaryGeneratedColumn({ name: 'id' })注解,这会让TypeORM将数据库中名为id的字段映射到_id属性,且默认按SQL自增主键处理。
    • 给id属性使用了MongoDB专属的@ObjectIdColumn()注解,这会让TypeORM认为数据库中的id字段是MongoDB的ObjectId类型,但实际你的数据库中id是数值类型(如1)。
  2. 查询时的类型不匹配
    当调用findOneBy({id})时,TypeORM会将传入的数值1转换为ObjectId类型去数据库匹配,但数据库中id是数值1,完全不匹配,因此返回null。

修复步骤

修改实体类的字段注解,使其正确对应MongoDB的存储结构:

// 替换原有的_id和id字段注解
@ObjectIdColumn()
_id!: string; // 对应MongoDB原生的_id字段(ObjectId类型)

@Column()
id: number; // 对应数据库中的id字段(数值类型)

// 其余字段保持不变
@AutoMap()                                                                                                                      
@Column()
scriptSequenceId: string;
                                                                                                          
@Column({default: EnumsStatusExecution.EXECUTION_STARTED})
status: EnumsStatusExecution;

@AutoMap()                                                                                                                      
@Column()
scriptExecutionStatus: ScriptExecutionStatusType[];

@AutoMap()                                                                                                                      
@Column()
creator: string;

@AutoMap()
@Column({ length: 64 })
userUpdater: string;

@AutoMap()
@Column()
creationDate: Date;

@AutoMap()
@Column()
lastUpdatedDate: Date;

修复说明

  • @ObjectIdColumn():专门用于映射MongoDB的原生_id字段,无需额外配置名称,TypeORM会自动关联。
  • @Column():用于映射普通数值/字符串类型的字段,正确匹配数据库中id字段的数值类型。

修改后重启应用,调用findOneSequence(1)即可正常查询到对应记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 05:50:11