mongodb - 在NestJS中做种子mongoDB的正确方法是什么,使用猫鼬并利用我已经定义的schmas
问题描述
我们正在将 NestJS 与 mongoose 一起使用,并希望播种 mongoDB。想知道为数据库播种的正确方法是什么,并使用已定义的数据库模式来确保播种的数据有效并得到正确维护。
在模块级别播种(就在模块定义之前)感觉很hacky并以线程池被破坏而告终,因此所有后续的mongo操作都失败了
解决方案
我已经使用了这样的 nestjs-command 库。
1.安装库:
https://www.npmjs.com/package/nestjs-command
2. 然后我创建了一个命令来播种我的 userService,例如:
src/modules/user/seeds/user.seed.ts
import { Command, Positional } from 'nestjs-command';
import { Injectable } from '@nestjs/common';
import { UserService } from '../../../shared/services/user.service';
@Injectable()
export class UserSeed {
constructor(
private readonly userService: UserService,
) { }
@Command({ command: 'create:user', describe: 'create a user', autoExit: true })
async create() {
const user = await this.userService.create({
firstName: 'First name',
lastName: 'Last name',
mobile: 999999999,
email: 'test@test.com',
password: 'foo_b@r',
});
console.log(user);
}
}
3. 将该种子命令添加到您的模块中。我在共享文件夹中创建了一个 SeedsModule,以便将来添加更多种子
src/shared/seeds.module.ts
import { Module } from '@nestjs/common';
import { CommandModule } from 'nestjs-command';
import { UserSeed } from '../modules/user/seeds/user.seed';
import { SharedModule } from './shared.module';
@Module({
imports: [CommandModule, SharedModule],
providers: [UserSeed],
exports: [UserSeed],
})
export class SeedsModule {}
顺便说一句,我正在将我的 userService 导入我的 SharedModule
4. 将 SeedsModule 添加到您的 AppModule
在您的 AppModule 上,通常在 src/app.module.ts 将 SeedsModule 添加到imports
最后
如果您按照 nestjs-command 存储库中的步骤操作,您应该能够运行
npx nestjs-command create:user
这将引导一个新应用程序并运行该命令,然后播种到您的 mongo/mongoose
希望对其他人也有帮助。
推荐阅读
- node.js - 如何在此路由路径中获取此帖子参数 ID?
- spring - 支持多种日期格式的 Kafka JsonDeserializer
- sas - Sas如何在显示器中有2个byvar
- c - 与“for循环”输出混淆
- java - 如何与 bin、conf 等少数目录一起构建战争
- javascript - 无法在 Angular 中访问对象属性
- r - 在 Rscript 中使用从 ShinyApp 获取的变量
- sql-server - Azure 数据同步可以用作主到主数据库复制吗?
- php - 我的前端不会与我的 Heroku 后端交互
- python - guvectorize 在 nopython 模式下不解析类型