Nestjs 使用mongodb
Docs: https://docs.nestjs.com/techniques/mongodb
yarn add @nestjs/mongoose mongoose
链接
// sec/app.module.ts
import { Module }from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MongooseModule } from '@nestjs/mongoose'
import { CatsModule } from './cats/cats.module';
@Module({
imports: [
MongooseModule.forRoot('mongodb://localhost/ajanuw', { useNewUrlParser: true }), // ajanuw数据库的名字
CatsModule
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
模型注入
// src/cats/schemas/cat.schema.ts
import * as mongoose from 'mongoose';
export const CatSchema = new mongoose.Schema({
name: String,
});
cats.module.ts 中使用
import { Module } from '@nestjs/common';
import { CatsController } from './cats.controller';
import { CatsService } from './cats.service';
import { MongooseModule } from '@nestjs/mongoose'
import { CatSchema } from './schemas/cat.schema'
@Module({
imports: [
MongooseModule.forFeature([ // Schema 定义数据库的结构
{ name: 'Cat', schema: CatSchema } // name: 'Cat' cats 表, Cat 必须和service时@InjectModel('Cat')的一样
])
],
controllers: [CatsController],
providers: [CatsService]
})
export class CatsModule {}
cats.service.ts 中注入 CatModel
import { Injectable } from '@nestjs/common';
import { Model } from 'mongoose'
import { InjectModel } from '@nestjs/mongoose'
import { Cat } from './interfaces/cat.interface'
import { CreateCat } from './class/create-cat.class'
const l = console.log
@Injectable()
export class CatsService {
constructor(
@InjectModel('Cat') private readonly catModel: Model<Cat> // Model 可以操作数据表
){}
async create(cat: CreateCat): Promise<Cat> {
const createdCat = new this.catModel(cat)
l(createdCat) // { _id: 5b8e2faba163251c9c769e6e, name: '小黑猫' } 返回一个docment
return await createdCat.save() // 保存 document
// return this.catModel.insertMany(cat)
}
async findAll(): Promise<Cat[]> {
return await this.catModel.find().exec()
}
}
cats.controller.ts
import { Controller, Get, Post, Body } from '@nestjs/common';
import { CatsService } from './cats.service'
import { CreateCat } from './class/create-cat.class'
const l = console.log;
@Controller('cats')
export class CatsController {
constructor(
private readonly catsServer: CatsService
){}
@Post()
create(@Body() cat: CreateCat){
this.catsServer.create(cat);
}
@Get()
findAll(){
return this.catsServer.findAll()
}
}
CreateCat
export class CreateCat {
readonly name: string;
}
Cat
import { Document } from 'mongoose'
export interface Cat extends Document {
readonly name: string;
}
完整的 cats.controller.ts
import { Controller, Get, Post, Body, Query, Delete } from '@nestjs/common';
import { CatsService } from './cats.service'
import { CreateCat } from './class/create-cat.class'
const l = console.log;
@Controller('cats')
export class CatsController {
constructor(
private readonly catsServer: CatsService
){}
@Post()
create(@Body() cat: CreateCat){
this.catsServer.create(cat);
}
@Get()
findAll(){
return this.catsServer.findAll()
}
@Get('find-cat')
findCat(@Query('catName') catName){
return this.catsServer.findCat(catName)
}
@Post('update-cat-name')
updateCatName(@Body() body){
this.catsServer.updateCatName(body)
}
@Delete('remove-cat')
removeCat(@Body('catName') catName){
this.catsServer.removeCat(catName)
}
}
cats.service.ts
import {
Injectable,
HttpException,
HttpStatus
} from '@nestjs/common';
import {
Model
} from 'mongoose'
import {
InjectModel
} from '@nestjs/mongoose'
import {
Cat
} from './interfaces/cat.interface'
import {
CreateCat
} from './class/create-cat.class'
const l = console.log;
@Injectable()
export class CatsService {
constructor(
@InjectModel('Cat') private readonly catModel: Model < Cat >
) {}
async create(cat: CreateCat): Promise < Cat > {
// const createdCat = new this.catModel(cat)
// return await createdCat.save()
return this.catModel.insertMany(cat)
}
async findAll(): Promise < Cat[] > {
return await this.catModel.find().exec()
}
async findCat(name: string): Promise < Cat[] > {
if (!name) {
throw new HttpException('请求参数不正确.', HttpStatus.FORBIDDEN)
}
let resCat = this.catModel.find({
name
})
return resCat
}
async updateCatName({name, newName}) {
if(!name || !newName){
throw new HttpException('请求参数不正确.', HttpStatus.FORBIDDEN)
}
const where = {
name: name
};
const update = {
$set: {
name: newName
}
};
return await this.catModel.updateOne(where, update);
}
async removeCat(catName){
l(catName)
if(!catName){
throw new HttpException('请求参数不正确.', HttpStatus.FORBIDDEN)
}
return await this.catModel.deleteOne({name: catName})
}
}
Nestjs 使用mongodb的更多相关文章
- Nestjs mongodb
nestjs 文档 mongoose 文档 使用"@meanie/mongoose-to-json"转换查询后返回的json数据 将"_id"转为"i ...
- Nestjs 缓存
Docs: https://docs.nestjs.com/techniques/caching yarn add @nestjs/mongoose mongoose yarn add cache-m ...
- 在 Nest.js 中使用 MongoDB 与 TypeORM
在 Nest.js 中使用 MongoDB 与 TypeORM 首先要在 database 文件夹里建立DatabaseModule模块文件, // database/database.module. ...
- Nestjs入门学习教程
初次接触Nest,有问题欢迎指出: 简介 NestJS是一个用于构建高效.可扩展的Node.js服务器端应用程序的开发框架.简单来说是一款Node.js的后端框架. 它利用JavaScript的渐进增 ...
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
随机推荐
- HA主备路由模式的原理 + HA和负载均衡的区别
HA主备路由模式的原理 HA是High Availability缩写,即高可用性 ,可防止网络中由于单个防火墙的设备故障或网络故障导致网络中断,保证网络服务的连续性和安全强度.目前,ha功能已经 ...
- 20190131 经验总结:如何从rst文件编译出自己的sqlalchemy的文档
20190131 经验总结:如何编译sqlalchemy的文档 起因 www.sqlalchemy.org官网上不去了,不管是直接上,还是用代理都不行. sqlalchemy属于常用工具,看不到官方的 ...
- 找不到指定的 VM 安装:类型 标准 VM,名称 jre7
问题背景是这样 原来使用的是jre7.0.55,后来为了安装使用 layabox IDE ,然后装了jdk_8u144 之后需要切换环境变量 之后java项目调试的时候重新设置了jdk,没问题. 直到 ...
- Linux内核剖析(五)Linux内核的构建过程
参考 一次实验引发的故事 – kernel build system探索—vmlinux是如何炼成的– kernel makefile 深度探索Linux操作系统:系统构建和原理解析.pdf 问题 在 ...
- Effective Java 第三版——67. 明智谨慎地进行优化
Tips 书中的源代码地址:https://github.com/jbloch/effective-java-3e-source-code 注意,书中的有些代码里方法是基于Java 9 API中的,所 ...
- vue前端知识点整理
1. 说一下Vue的双向绑定数据的原理 vue 实现数据双向绑定主要是:采用数据劫持结合发布者-订阅者模式的方式,通过 Object.defineProperty() 来劫持各个属性的 setter, ...
- 14.翻译系列:从已经存在的数据库中生成上下文类和实体类【EF 6 Code-First系列】
原文链接:https://www.entityframeworktutorial.net/code-first/code-first-from-existing-database.aspx EF 6 ...
- [k8s]k8s的控制层kubelet+docker配合调度机制(k8架构)
意外停掉一台node的kubelet,发现调度有问题,研究了下调度的细节 k8s架构 控制层- kubelet(配合节点docker工作) 数据层- kube-proxy 逻辑图: object 参考 ...
- 为github公开项目单独设置用户名
背景: 由于在公司git的配置是公司内自己的用户id及邮箱,如果用同样的配置在github上提交公开项目,可能造成用户名及邮箱泄露,因此对于github上的项目,最好单独设置用户名,而每次在向gith ...
- 试试SQLServer 2014的内存优化表
SQL Server2014存储引擎:行存储引擎,列存储引擎,内存引擎 SQL Server 2014中的内存引擎(代号为Hekaton)将OLTP提升到了新的高度. 现在,存储引擎已整合进当前的数据 ...