Nodejs Nestjs Mongoose插件@nestjs/mongoose的使用

Nodejs Nestjs Mongoose插件@nestjs/mongoose的使用
在使用NestJS框架结合Mongoose进行数据库操作时,[@nestjs](/user/nestjs)/mongoose是一个非常方便的库。下面我将详细介绍如何安装和配置[@nestjs](/user/nestjs)/mongoose,以及如何定义模型、创建服务和控制器来执行基本的CRUD(创建、读取、更新、删除)操作。

1. 安装依赖

首先,你需要安装[@nestjs](/user/nestjs)/mongoosemongoose

npm install [@nestjs](/user/nestjs)/mongoose mongoose

2. 配置Mongoose模块

在你的NestJS应用中,你可以在一个独立的模块或主模块(如app.module.ts)中配置Mongoose模块。以下是在app.module.ts中配置的例子:

import { Module } from '[@nestjs](/user/nestjs)/common';
import { MongooseModule } from '[@nestjs](/user/nestjs)/mongoose';

@Module({
  imports: [
    MongooseModule.forRoot('mongodb://localhost/test'), // 连接到本地MongoDB数据库
  ],
  controllers: [],
  providers: [],
})
export class AppModule {}

如果你想要为特定的模型创建单独的模块,可以这样做:

import { Module } from '[@nestjs](/user/nestjs)/common';
import { MongooseModule } from '[@nestjs](/user/nestjs)/mongoose';
import { User, UserSchema } from './schemas/user.schema'; // 导入模型定义

@Module({
  imports: [
    MongooseModule.forFeature([{ name: User.name, schema: UserSchema }]), // 注册模型
  ],
  controllers: [],
  providers: [],
})
export class UserModule {}

3. 定义模型

定义一个模型需要创建一个schema,并将其导出。例如:

import { Prop, Schema, SchemaFactory } from '[@nestjs](/user/nestjs)/mongoose';
import { Document } from 'mongoose';

@Schema()
export class User extends Document {
  @Prop({ required: true })
  name: string;

  @Prop({ required: true, unique: true })
  email: string;
}

export const UserSchema = SchemaFactory.createForClass(User);

4. 创建服务

接下来,创建一个服务来处理业务逻辑。这里以用户服务为例:

import { Injectable } from '[@nestjs](/user/nestjs)/common';
import { InjectModel } from '[@nestjs](/user/nestjs)/mongoose';
import { Model } from 'mongoose';
import { User, UserSchema } from './schemas/user.schema';

@Injectable()
export class UserService {
  constructor(@InjectModel(User.name) private userModel: Model<User>) {}

  async create(user: User): Promise<User> {
    const createdUser = new this.userModel(user);
    return createdUser.save();
  }

  async findAll(): Promise<User[]> {
    return this.userModel.find().exec();
  }

  // 其他方法...
}

5. 创建控制器

最后,创建一个控制器来暴露API端点:

import { Controller, Get, Post, Body } from '[@nestjs](/user/nestjs)/common';
import { UserService } from './user.service';
import { User } from './schemas/user.schema';

@Controller('users')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Post()
  create(@Body() user: User) {
    return this.userService.create(user);
  }

  @Get()
  findAll() {
    return this.userService.findAll();
  }
}

通过上述步骤,你就能够在NestJS应用中使用[@nestjs](/user/nestjs)/mongoose来操作MongoDB数据库了。你可以根据需要扩展更多的功能,如更新和删除操作。


3 回复

当然,让我们来聊聊如何用好@nestjs/mongoose这个插件吧!

想象一下,你正在做一个美味的披萨,而Mongoose就是你的面团。@nestjs/mongoose就像是那个神奇的厨师,教你如何把面团变成美味的披萨。

首先,你需要安装它(就像买来面团):

npm install @nestjs/mongoose mongoose

然后,在你的模块里导入它(就像开始揉面):

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';

@Module({
  imports: [
    MongooseModule.forRoot('mongodb://localhost/test'),
  ],
})
export class AppModule {}

最后,你可以创建一个服务来操作数据库(就像加料做披萨):

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User, UserDocument } from './schemas/user.schema';

@Injectable()
export class UsersService {
  constructor(@InjectModel(User.name) private userModel: Model<UserDocument>) {}

  async create(user: User): Promise<UserDocument> {
    const newUser = new this.userModel(user);
    return newUser.save();
  }
}

这样,你就有了一个基础的NestJS + Mongoose的结构了!现在,你可以开始享受你的披萨(开发应用)啦!


@nestjs/mongoose 是一个用于 NestJS 的库,它允许你与 MongoDB 数据库进行交互。以下是如何在 NestJS 项目中使用 @nestjs/mongoose 的基本步骤:

安装必要的依赖

首先,你需要安装 @nestjs/mongoosemongoose 包。可以通过 npm 或 yarn 来安装:

npm install @nestjs/mongoose mongoose

或者如果你更喜欢 yarn:

yarn add @nestjs/mongoose mongoose

配置 Mongoose 模块

接下来,你需要在你的 NestJS 应用中配置 Mongoose 模块。打开你的主应用模块(通常是 app.module.ts),并导入 MongooseModule

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';

@Module({
  imports: [
    // 连接到本地 MongoDB 服务器
    MongooseModule.forRoot('mongodb://localhost:27017/mydatabase'),
  ],
})
export class AppModule {}

这里使用的是本地 MongoDB 服务器的连接字符串。你可以根据需要更改这个连接字符串。

创建 Schema 和 Model

现在,你可以在 NestJS 中定义你的数据模型。首先,创建一个新的模块来管理特定的数据集(例如用户):

nest generate module users
nest generate service users

然后,在 users.module.ts 文件中导入 MongooseModule 来为 User 定义一个 schema:

import { Module } from '@nestjs/common';
import { MongooseModule } from '@nestjs/mongoose';
import { User, UserSchema } from './user.schema';

@Module({
  imports: [
    MongooseModule.forFeature([{ name: 'User', schema: UserSchema }]),
  ],
  providers: [],
  exports: []
})
export class UsersModule {}

接着,定义 user.schema.ts

import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

export type UserDocument = User & Document;

@Schema()
export class User {
  @Prop({ required: true })
  name: string;

  @Prop({ required: true })
  email: string;
}

export const UserSchema = SchemaFactory.createForClass(User);

使用 Model

最后,在你的服务中注入并使用这个模型:

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User, UserDocument } from './user.schema';

@Injectable()
export class UsersService {
  constructor(@InjectModel('User') private userModel: Model<UserDocument>) {}

  async create(user: User): Promise<UserDocument> {
    const newUser = new this.userModel(user);
    return await newUser.save();
  }

  async findAll(): Promise<UserDocument[]> {
    return await this.userModel.find().exec();
  }
}

通过这些步骤,你就能够开始在 NestJS 应用中使用 @nestjs/mongoose 来操作 MongoDB 数据库了。

@nestjs/mongoose 是用于 NestJS 应用程序的 Mongoose ORM 集成。使用步骤如下:

  1. 安装依赖:npm install @nestjs/mongoose mongoose
  2. app.module.ts 中导入 MongooseModule 并连接数据库:
    imports: [
      MongooseModule.forRoot('mongodb://localhost/test'),
    ],
    
  3. 创建模块并定义模型:
    [@Module](/user/Module)({
      imports: [MongooseModule.forFeature([{ name: 'Cat', schema: CatSchema }])],
    })
    export class CatsModule {}
    
  4. 在服务中注入模型并操作数据。

更多细节可查阅官方文档。

回到顶部