Возможная ошибка с Loopback4 внутри findOne с MongoDB - PullRequest
0 голосов
/ 08 апреля 2019

Описание / Шаги для воспроизведения / Предложение функции

У меня есть только 2 теста моделей, и тест atest имеет (id, name, age) atest (testId), который ссылается на id из тестовой модели

У меня есть только 1 контроллер для (atest) с 2 ENDPOINTS get '/ eltest'>, который findOne по testId

return await this.atestRepository.findOne({where : {testId : "5ca358720916cec7fd29e875"}});

get '/ anothertest'>, который findOne по идентификатору

return await this.atestRepository.findOne({where : {id : "5ca3589e0916cec7fd29e87a"}});

Текущее поведение

первый работает хорошо - но второй не находит существующую запись

Ожидаемое поведение

оба должны работать и находить существующую записьвнутри базы данных

Поиск и решения, которые я пытался с помощью

, изменив @model () на @model ({settings: {strictObjectIDCoercion: true,},}) внутри модели тестирования;работает как переключатель - он повреждает работающую ENDPOINT и исправляет поврежденную ENDPOINT

. Пожалуйста, используйте это репо , чтобы воспроизвести проблему

1 Ответ

0 голосов
/ 08 апреля 2019

Вам нужно использовать 2 разных репозитория для этого случая.Смотрите здесь

return await this.atestRepository.findOne({where : {id : "5ca3589e0916cec7fd29e87a"}});

столбец идентификатора модели тестирования должен соответствовать полю идентификатора в модели тестирования.Это никогда не может быть идентификатором тестовой модели.Я думаю, что вы намереваетесь сделать

export class AtestController {
  constructor(
    @repository(AtestRepository)
    public atestRepository : AtestRepository,

    @repository(TestRepository)
    public testRepository : TestRepository,
  ) {}

  @get('/eltest', {
    responses: {
      '200': {
        description: 'Array of Atest model instances',
        content: {
          'application/json': {
            schema: {type: 'array', items: {'x-ts-type': Atest}},
          },
        },
      },
    },
  })
  async find() {
    return await this.atestRepository.findOne({where : {testId : "5ca358720916cec7fd29e875"}});
  }

  @get('/anothertest', {
    responses: {
      '200': {
        description: 'Array of Atest model instances',
        content: {
          'application/json': {
            schema: {type: 'array', items: {'x-ts-type': Atest}},
          },
        },
      },
    },
  })
  async findA() {
    return await this.testRepository.findOne({where : {id : "5ca3589e0916cec7fd29e87a"}});
  }
}

Примечание. Я использую здесь testRepository.Это должно работать.Надеюсь, это поможет.

Также, пожалуйста, замените

@model({ settings: { strictObjectIDCoercion: true, }, })

на

@model()
...