NestJs / Mongoose Несколько схем для одной модели

Я размышлял, есть ли способ иметь несколько схем для одной и той же модели. В одном из моих модулей у меня есть две разные схемы, которые пытаются получить доступ к одной и той же модели. Но когда я это сделаю:

@Module({
   imports: [
      MongooseModule.forFeature([
         {name: 'foo', schema: Schema1},
         {name: 'foo', schema: Schema2},
   ]), ......

Я получаю сообщение об ошибке Cannot overwrite 'foo' model once compiled

Вот пример имеющихся у меня схем:

export class Schema1{
   type: { type: string, index: true, default: 'someValue'},
   data: {mapname: string}
}
export class Schema2{
   type: {type: string, index: true, default: 'anotherValue'}.
   data: {showStats: boolean, email: string}
}

person Alexandre Fradette    schedule 11.05.2018    source источник
comment
Но как узнать, какую модель использовать? Когда вы вставляете модель в схему, на нее ссылаются по имени @InjectModel('foo'), и это будет неоднозначно. Как вы хотите решить, какую схему использовать? Чего ты хочешь добиться?   -  person Kim Kern    schedule 26.07.2018
comment
Я наконец понял, что это именование использовалось только для создания связи между MongooseModule и InjectModel внутри службы. Я подумал, что это должно быть то же самое, что и название Коллекции.   -  person Alexandre Fradette    schedule 26.07.2018
comment
Может быть, добавьте это как ответ и примите это. Это неприятно для людей, которые проводят время над вопросом, на который нет ответа, а потом обнаруживают, что он уже решен.   -  person Kim Kern    schedule 30.07.2018


Ответы (1)


При использовании модели, например, в службе, на нее ссылаются только по имени @InjectModel('foo') и, следовательно, она должна быть однозначной. Вы не можете определить две модели с одним и тем же именем.

Как вы сказали, возможно, чтобы две модели указывали на одну и ту же коллекцию, поскольку имя коллекции является необязательным параметром, см. исходный код:

static forFeature(
  models: { name: string; schema: any; collection?: string }[] = [],
  connectionName: string = DefaultDbConnectionToken,
)
person Kim Kern    schedule 26.07.2018