如何将 NestJS 配置为 运行 mongosh 脚本

How do I configure NestJS to run mongosh scripts

我需要在 SaaS 平台上注册新用户时动态创建 mongo 数据库。

如何将 NestJS 配置为 运行 所需的脚本, 创建数据库 ,以及如何 动态连接创建的数据库每个用户?

我的用例是否有更好的方法?

新用户 => 为他们创建新数据库,并将详细信息存储在主 SaaS 数据库中。

当用户登录时,从主数据库获取数据库详细信息,并创建一个连接,以读取他们的数据。

我认为没有必要为每个用户创建一个新的数据库。为什么不创建一个用户集合,而不是为每个用户创建一个新对象。 Mongo对象可以存储相当多的信息。

我不是 nestjs 专家,但我认为没有办法动态连接更多数据库。当您启动您的应用程序时,会启动一个 mongoDB 实例,请不要忘记 nestjs 中的所有 类 都是单例。

所以,我能做到这一点。

我创建了一个数据库服务class,在其中,我使用MongooseModuleOptions创建了一个新的连接,并向它注入了请求范围,我从请求中提取了数据库名称并将其动态传递给createMongooseOptions 方法中的 uri 并动态创建连接。

import { Inject } from '@nestjs/common';
import { MongooseOptionsFactory, MongooseModuleOptions } from '@nestjs/mongoose';
import { REQUEST } from '@nestjs/core';
import { Request } from 'express';


export class DatabaseService implements MongooseOptionsFactory{
    constructor(
        @Inject(REQUEST) private readonly request: Request) {
    }

    createMongooseOptions(): MongooseModuleOptions {
        const urii = process.env.CLUSTER+'/'+this.request.body.dbName+"?retryWrites=true&w=majority"
        return {
            uri: urii
        };
    }  
}

然后在用户模块中,我将数据插入模式中指定的集合中,自动使用连接创建数据库、集合和条目,如果存在,则使用数据库和集合。

import { Inject, Injectable } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import { User, UserDocument } from './schemas/user.schema';
import { InjectConnection, InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';

@Injectable()
export class UserService {
  constructor(@InjectModel(User.name) private userModel:Model<UserDocument>){}
  
  async create(createUserDto: CreateUserDto) {
    const createdUser = new this.userModel(createUserDto)
    return createdUser.save()
  }

}

这对我来说非常有效。

谢谢大家