mongo数据库添加副本集后连不上

311 阅读1分钟

由于涉及到mongo的事务处理,我们的mongo服务需要开启副本集,但是开启之后发现数据库连不上了。

框架使用的是nestjs,由于compass能够连接,所以可以判断数据库运行正常,后来经过排查发现连接时需要在选项中添加一条:directConnection: true

完整的连接模块内容应该是:

import { Module } from "@nestjs/common";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { MongooseModule, MongooseModuleOptions } from "@nestjs/mongoose";

@Module({
  imports: [
    MongooseModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: (config: ConfigService) => {
        const mongooseOptions: MongooseModuleOptions = {
          uri: config.get("MONGO_URI"),
          dbName: config.get("MONGO_DB_NAME"),
          user: config.get("MONGO_USER"),
          pass: config.get("MONGO_PASS"),
          authSource: config.get("MONGO_AUTH_SOURCE"),
          directConnection: true,
        };
        return mongooseOptions;
      },
      inject: [ConfigService]
    })
  ]
})
export class MongoConfigMoudle { }

为什么突然想起记录这个问题呢,因为今天在使用studio连接数据库时又遇到这个问题了,提示:getaddrinfo ENOTFOUND 352a3d9236e2,查问题的时候都说是地址或者端口填错了,最后才发现有一个坑爹的选项

image.png