如何动态更改 Mongoose 提供程序中的集合或数据库的名称,Nestjs?

Posted

技术标签:

【中文标题】如何动态更改 Mongoose 提供程序中的集合或数据库的名称,Nestjs?【英文标题】:How to change the name of a collection or db in a Mongoose provider dynamically, Nestjs? 【发布时间】:2019-08-22 12:01:19 【问题描述】:

我需要更改我的查询在 Nestjs 应用中指向的位置。

我正在使用带有版本的 Angular 应用程序,因此我必须在后端使用 Mongoose 和 Nestjs 动态更改集合甚至数据库。

我想我必须更改提供程序中的目标,并尝试根据用户在前面选择的版本动态更改它。

反正我有这样的东西

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>,

谢谢,感谢您的帮助

【问题讨论】:

你用的是什么版本的nestjs? Nestjs 5.4.x :) 【参考方案1】:

我对Nestjs不熟悉,但我认为你应该在运行时初始化集合模型,而不是直接在provider中创建

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

【讨论】:

当然,但是在我的用例中,我不知道先验或之前的集合,所以我必须动态更改它

以上是关于如何动态更改 Mongoose 提供程序中的集合或数据库的名称,Nestjs?的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose.js:删除集合或数据库

Mongoose.js:删除集合或数据库

Mongoose.js:删除集合或数据库

使用 Mongoose 动态创建集合

使用 Mongoose 动态创建集合

如何在 Mongoose 中设置数据库名称和集合名称?