Mongodb 键入格式findOne抛出';传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串';

Mongodb 键入格式findOne抛出';传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串';,mongodb,nestjs,typeorm,Mongodb,Nestjs,Typeorm,您好,我正在将NestJs与TypeOrm一起使用,目前连接到MongoDB(但我希望独立,因为大多数客户使用MSSQL和Postgres数据库) 基本上,我想将一个键/值对存储到数据库中。两者都是String类型。这是包含该对的映射实体 @Entity() export class Mapping extends BaseEntity { @PrimaryColumn() key: string; @Column() value: string; } 存储库当前为空 @En

您好,我正在将NestJs与TypeOrm一起使用,目前连接到MongoDB(但我希望独立,因为大多数客户使用MSSQL和Postgres数据库)

基本上,我想将一个键/值对存储到数据库中。两者都是
String
类型。这是包含该对的映射实体

@Entity()
export class Mapping extends BaseEntity {
  @PrimaryColumn()
  key: string;

  @Column()
  value: string;
}
存储库当前为空

@EntityRepository(Mapping)
export class MappingsRepository extends Repository<Mapping> {}
@EntityRepository(映射)
导出类映射存储库扩展存储库{}
在我的服务文件中,我试图通过它的键找到一个值

  public async getValueByKey(key: string): Promise<string> {
    const mapping: Mapping = await this.mappingsRepository.findOne(key);

    if (!mapping) {
      throw new NotFoundException(`Key ${key} does not exist`);
    }

    return mapping.value;
  }
公共异步getValueByKey(key:string):承诺{ 常量映射:mapping=wait this.mappingsRepository.findOne(key); 如果(!映射){ 抛出新的NotFoundException(`Key${Key}不存在`); } 返回映射值; } 不幸的是,
findOne
函数在传递密钥时总是抛出此错误

传入的参数必须是12字节的单个字符串或 24个十六进制字符

如何修复此问题,以便传入任何类型的
String
键?参数
已定义,我尝试使用伪值,如
f
ffsdagsdgfdg

可以尝试吗

等待this.mappingsRepository.findOne({key})


我猜对于mongo来说,
typeorm
除了
id

findOne
之外不理解主键意味着它将按属性
\u id
而不是您的
键来搜索文档
因为,默认情况下,mongo总是将此
\u id
添加为每个文档的唯一验证器 因此,您应该像在
itssajan
answer中定义的那样提供对该方法的查询


但是我认为您的TypeORM用例不是最好的,因为它是为SQL数据库而设计的,而不是为NoSQL数据库而设计的。
key
的值是多少?确保它已定义。它已定义。我用随机字符串测试了它。因此,参数本身带有一个非空的随机字符串