如何将 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()
}
}
这对我来说非常有效。
谢谢大家
我需要在 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()
}
}
这对我来说非常有效。
谢谢大家