【问题标题】:How do I configure NestJS to run mongosh scripts如何配置 NestJS 以运行 mongosh 脚本
【发布时间】:2021-11-03 02:51:23
【问题描述】:

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

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

对于我的用例有什么更好的方法吗?

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

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

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。
  • 请检查正确答案,我能够解决它。

标签: javascript typescript mongodb nestjs mongo-shell


【解决方案1】:

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

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

【讨论】:

  • 请在您的回答中提供更多详细信息。正如目前所写的那样,很难理解您的解决方案。
  • 碰巧我能够解决它,我会尽快发布解决方法。
【解决方案2】:

所以,我能够做到这一点。

我创建了一个数据库服务类,在其中,我使用 MongooseModuleOptions 来创建一个新连接,并向其注入 Request Scope,我从请求中提取数据库名称并在 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
        };
    }  
}

然后在 users 模块中,我将数据插入到 schema 中指定的集合中,它会自动使用连接来创建数据库、集合和条目,如果存在,它会使用数据库和集合。

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()
  }

}

这对我来说非常有效。

谢谢大家???

【讨论】:

    猜你喜欢
    • 2019-11-16
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多