Mongodb 键入格式findOne抛出';传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串';
您好,我正在将NestJs与TypeOrm一起使用,目前连接到MongoDB(但我希望独立,因为大多数客户使用MSSQL和Postgres数据库) 基本上,我想将一个键/值对存储到数据库中。两者都是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
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
除了idfindOne
之外不理解主键意味着它将按属性\u id
而不是您的键来搜索文档
因为,默认情况下,mongo总是将此\u id
添加为每个文档的唯一验证器
因此,您应该像在itssajan
answer中定义的那样提供对该方法的查询
但是我认为您的TypeORM用例不是最好的,因为它是为SQL数据库而设计的,而不是为NoSQL数据库而设计的。key
的值是多少?确保它已定义。它已定义。我用随机字符串测试了它。因此,参数本身带有一个非空的随机字符串