Как динамически изменить имя коллекции или базы данных в поставщике Mongoose, Nestjs?

#node.js #angular #typescript #mongoose #nestjs

#node.js #angular #typescript #mongoose #nestjs

Вопрос:

Мне нужно было бы изменить направление моих запросов в приложении Nestjs.

Я работаю в приложении Angular с версиями, поэтому мне приходится динамически изменять коллекции или даже базы данных в моем бэкэнде с помощью Mongoose и Nestjs.

Я полагаю, мне нужно изменить target в поставщике и попытаться изменить его динамически в зависимости от того, какую версию пользователь выбрал спереди.

В любом случае у меня есть что-то вроде

 import { Connection } from 'mongoose';
import { TestSchema } from './schemas/test.schema';
    export const testProviders = [
  {
    provide: 'TestModelToken',
    useFactory: (connection: Connection) =>
      connection.model('Test', FilterSchema, 'tests'),

    inject: ['DbConnectionToken'],
  },
];
  

И позже, например, я хочу изменить его, чтобы динамически указывать на эту коллекцию

 tests_24_04_2019
  

Мой сервис выглядит следующим образом

 @Injectable()
export class TestsService {
  constructor(
    @Inject("TestModelToken") private readonly testModel: Model<Test>,
  

Спасибо, я ценю любую помощь

Комментарии:

1. какую версию nestjs вы используете?

2. Nestjs 5.4.x 🙂

Ответ №1:

Я не знаком с Nestjs, но я думаю, что вам следует инициализировать модель коллекции во время выполнения, а не создавать ее непосредственно в provider

  {
    provide: 'TestModelToken',
    useFactory: (connection: Connection) => {
        getTestModel(version: string) => connection.model('Test', FilterSchema, `tests_${version}`),
    }
    inject: ['DbConnectionToken'],
 },
  

Комментарии:

1. Безусловно, однако в моем случае использования я не знаю коллекцию априори или раньше, поэтому я должен изменять ее динамически