无法配置nestjs/mongoose,初始数据库

Gin*_*ano 5 mongoose mongodb nestjs

我不确定我是否了解 nestjs/mongoose 配置。

我没有得到任何结果,并假设它正在查询我的管理数据库。

app.module.ts:

import { ConfigService } from './config/config.service';
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';

import { ConfigModule } from './config/config.module';
import { CaseAssetsModule } from './case-assets/case-assets.module';

@Module({
  imports: [
    ConfigModule,
    CaseAssetsModule,
    MongooseModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        uri: configService.getString('mongodb.uri'),
        useNewUrlParser: true,
        useUnifiedTopology: true,
      }),
      inject: [ConfigService],
    })
  ],
  controllers: [],
  providers: [],
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)

我的配置设置:

mongodb.uri = mongodb://<<myuser>>:<<mypwd>>#@<<myserver>>:27017/admin
Run Code Online (Sandbox Code Playgroud)

案例资产.module.ts:

import { AssetSchema } from './asset.schema';
import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { CaseAssetsController } from './case-assets.controller';
import { CaseAssetsService } from './case-assets.service';

@Module({
  imports: [MongooseModule.forFeature([{ name: 'Asset', schema: AssetSchema, collection: 'assets' }])],
  controllers: [CaseAssetsController],
  providers: [CaseAssetsService]
})
export class CaseAssetsModule {}
Run Code Online (Sandbox Code Playgroud)

在哪里指定要连接的数据库?我指定 admin 是因为这是我进行身份验证的数据库。

吉娜

Jay*_*iel 10

您已经通过为该MongooseModule.forRootAsync()方法提供的配置确定了要连接到的数据库。从那里,MongooseModule.forFeature()使用的任何东西都使用相同的配置(即相同的数据库)

使用解决方案编辑

好的,现在我明白了问题所在。看起来像 mongo 你可以提供这样的authSource查询参数mongodb://mongodb1.example.com:27317,mongodb2.example.com:27017/?authSource=authDB。只要您需要对数据库中的每个模型进行身份验证,这种 URI 就可以处理它。您可以将其传递给MongooseModule.forRoot({})orMongooseModule.forRootAsync({})配置。

但是,如果您需要在每个模型的基础上进行此操作,我认为当前MongooseModule无法处理。

编辑

有两个连接的解决方案:

app.module.ts

MongooseModule.forRootAsync({
 imports: [ConfigModule],
 connectionName: 'firstDB',
 useFactory: async (config: ConfigService) => ({
  uri: config.get('app.firstDB'),
  useNewUrlParser: true,
  useUnifiedTopology: true,
 }),
 inject: [ConfigService],
}),
MongooseModule.forRootAsync({
 imports: [ConfigModule],
 connectionName: 'secondDB',
 useFactory: async (config: ConfigService) => ({
  uri: config.get('app.secondDB'),
  useNewUrlParser: true,
  useUnifiedTopology: true,
 }),
 inject: [ConfigService],
}),
Run Code Online (Sandbox Code Playgroud)

猫.module.ts

@Module({
 imports: [
  MongooseModule.forFeature(
   [
     {
      name: 'Cat',
      schema: CatSchema,
      collection: 'cats',
     },
    ],
   'firstDB',
  ),
 ],
})
export class CatsModule {}
Run Code Online (Sandbox Code Playgroud)

狗模块.ts

@Module({
 imports: [
  MongooseModule.forFeature(
   [
     {
      name: 'Dog',
      schema: DogSchema,
      collection: 'dogs',
     },
    ],
   'secondDB',
  ),
 ],
})
export class DogsModule {}
Run Code Online (Sandbox Code Playgroud)