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

标签 mongodb mongoose 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 { }

我的配置设置:
mongodb.uri = mongodb://<<myuser>>:<<mypwd>>#@<<myserver>>:27017/admin

案例 Assets .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 {}

我在哪里指定要连接的数据库?我指定 admin 因为那是我验证的数据库。

吉娜

最佳答案

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

用解决方案编辑

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

猫.module.ts
@Module({
 imports: [
  MongooseModule.forFeature(
   [
     {
      name: 'Cat',
      schema: CatSchema,
      collection: 'cats',
     },
    ],
   'firstDB',
  ),
 ],
})
export class CatsModule {}

狗.module.ts
@Module({
 imports: [
  MongooseModule.forFeature(
   [
     {
      name: 'Dog',
      schema: DogSchema,
      collection: 'dogs',
     },
    ],
   'secondDB',
  ),
 ],
})
export class DogsModule {}

关于mongodb - 无法配置nestjs/mongoose,初始数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59271043/

相关文章:

mongodb - 如何在没有 else 表达式的情况下在 mongoDB 中使用 $cond?

c# - 如何在第一个文档中恢复 MongoDB ChangeStream,而不仅仅是在我开始收听后进行更改

node.js - 填充不起作用 Mongoose(无数据库插入)

mongodb - 在 Jersey API-REST 中响应 mongodb objectDB

javascript - AngularJS 工厂变量变得未定义

javascript - Node.js Promise 与 Mongoose

nestjs - 带有 NestJS 和异步功能的 Jest

javascript - Mongoose 按子标准查找文档

javascript - 是否可以防止计划任务在 NestJS 中重叠?

node.js - NestJS 返回 HTTP 请求的结果