TypeOrm findOne бросает «Переданный аргумент должен быть одной строкой из 12 байтов или строкой из 24 шестнадцатеричных символов» - PullRequest
2 голосов
/ 12 февраля 2020

Привет! Я использую Nest Js с TypeOrm и в настоящее время подключен к MongoDB (но я хочу быть независимым, потому что большинство клиентов используют базы данных MS SQL и Postgres).

В основном я хотите сохранить пару ключ / значение в базе данных. Оба типа String. Это сопоставляемая сущность, содержащая пару

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

  @Column()
  value: string;
}

В настоящее время хранилище пусто

@EntityRepository(Mapping)
export class MappingsRepository extends Repository<Mapping> {}

В моем служебном файле я пытаюсь найти значение по его ключу

  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;
  }

К сожалению, функция findOne всегда выдает эту ошибку при передаче ключа

Передаваемый аргумент должен быть единственной строкой из 12 байтов или строкой из 24 шестнадцатеричных символов

Как я могу это исправить, чтобы я мог передать любые ключи типа String? Параметр key определен, я пробовал его с фиктивными значениями, такими как f или ffsdagsdgfdg

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Можете ли вы попробовать

await this.mappingsRepository.findOne({key});

Полагаю, typeorm не понимает первичный ключ, кроме id

0 голосов
/ 12 февраля 2020

findOne для mon go означает, что он будет искать документ по свойству _id, а не по вашему key, потому что mon go по умолчанию всегда добавляет этот _id в качестве уникального валидатора для каждого документа, поэтому Вы должны предоставить запрос к этому методу, как это определено в itssajan answer

, но я думаю, что ваш вариант использования TypeORM не лучший, потому что он предназначен для работы с SQL dbs, и не нет SQL дбс

...