关键词

NestJs使用Mongoose对MongoDB操作的方法

下面就为你详细讲解NestJs使用Mongoose对MongoDB操作的方法,并提供两条示例说明。

NestJs使用Mongoose对MongoDB操作的方法

环境搭建

在开始使用Mongoose对MongoDB进行操作之前,先完成NestJs和Mongoose的环境搭建。

安装NestJs

使用以下命令安装NestJs:

$ npm install -g @nestjs/cli

安装Mongoose

使用以下命令安装Mongoose:

$ npm install --save @nestjs/mongoose mongoose

在Module中导入MongooseModule:

@Module({
  imports: [MongooseModule.forRoot('mongodb://localhost/nest')],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

以上代码中的“mongodb://localhost/nest”表示MongoDB的链接地址,其中“nest”为数据库名称。

操作MongoDB

定义Schema

在操作MongoDB之前,需要首先定义Schema。

import * as mongoose from 'mongoose';

export const CatSchema = new mongoose.Schema({
  name: String,
  age: Number,
  breed: String,
});

以上示例定义了一个名为“CatSchema”的Schema,包含了“name”、“age”和“breed”三个字段。

定义Model

定义Model需要使用到上述定义好的Schema,以下为示例代码:

import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { Cat } from './interfaces/cat.interface';
import { CreateCatDto } from './dto/create-cat.dto';

@Injectable()
export class CatsService {
  constructor(@InjectModel('Cat') private readonly catModel: Model<Cat>) {}

  async create(createCatDto: CreateCatDto): Promise<Cat> {
    const createdCat = new this.catModel(createCatDto);
    return createdCat.save();
  }

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

该示例代码定义了一个名为“CatsService”的Service,包含了“create”和“findAll”两个方法。其中“create”方法向数据库中插入一条记录,而“findAll”则返回所有记录。

调用Model

在Controller中调用上述定义好的Service。

import { Controller, Get, Post, Body } from '@nestjs/common';
import { CreateCatDto } from './dto/create-cat.dto';
import { CatsService } from './cats.service';
import { Cat } from './interfaces/cat.interface';

@Controller('cats')
export class CatsController {
  constructor(private readonly catsService: CatsService) {}

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    this.catsService.create(createCatDto);
  }

  @Get()
  async findAll(): Promise<Cat[]> {
    return this.catsService.findAll();
  }
}

以上示例代码中的“@Post()”和“@Get()”注解表示HTTP请求方式(POST和GET),在调用相应的方法时将自动映射到相应的HTTP请求。

示例说明

示例一:插入一条记录

以下为向MongoDB中插入一条记录的示例代码:

async function create(): Promise<any> {
  const cat = new CatModel({
    name: 'kitty',
    age: 1,
    breed: 'British Shorthair',
  });

  await cat.save();
}

create();

以上代码将向MongoDB中插入一条名为“kitty”的记录,包含“name”、“age”和“breed”三个字段。

示例二:查询所有记录

以下为查询MongoDB中所有记录的示例代码:

async function findAll(): Promise<any> {
  const cats = await CatModel.find().exec();
  console.log(cats);
}

findAll();

以上代码将查询MongoDB中所有记录,并将查询结果打印在控制台上。

本文链接:http://task.lmcjl.com/news/4813.html

展开阅读全文