NestJs使用Mongoose对MongoDB操作的方法


Posted in Javascript onFebruary 22, 2021

最近开始学习NestJs这个框架。学习成本比其他框架相对高了很多。
其注册配置相对复杂一开始学起来有点摸不着哪跟哪;但这也是相比其他框架更规范严谨的体现。保证了大型项目的稳定健壮的使用!

在学习node基础框架Express和Koa的时候。对数据库的操作一直都是以编写SQL语句实现。需要什么编写什么。这样显得非常死板也不灵活。后来了解到NestJs是OOP思想编程(NestJs可以使用TypeScript也是OOP思想)才知道原来对数据库的操作可以用对象形式体现。在数据库中每一个表(Schema)都可以看作Nest框架中的一个对象。这样在对数据库操作就显得非常灵活

例如:(这是随便一个表的结构)

NestJs使用Mongoose对MongoDB操作的方法

它可以看做成NestJs中的一个对象

NestJs使用Mongoose对MongoDB操作的方法

这样一来对数据库中每个表的操作就显得非常简单了。
这里我们拿链接mongoDB操作来举例

根据官方文档使用mongoose

首先是安装所需依赖

npm install --save @nestjs/mongoose mongoose

可以加个淘宝镜像:

?registry=https://registry.npm.taobao.org

这个已经打的很熟练了用起来很方便。下载速度会相对快很多

安装完成后我们到app.module.ts中添加配置

app.module.ts

NestJs使用Mongoose对MongoDB操作的方法

在imports:[]中添加相应配置

MongooseModule.forRoot(‘mongodb://localhost/test')
//后面是MongoDB的位置(根据需要而定)
对应添加相应依赖
import { Module } from ‘@nestjs/common';
import { MongooseModule } from ‘@nestjs/mongoose';

这个时候保存后在控制台就可以看到
DeprecationWarning: current URL string parser is deprecated, and will be removed in a future version. To use the new parser, pass option { useNewUrlParser: true } to MongoClient.connect
这么类似的一句话。就说明链接成功了

接着对模型注入(Schema)
在你相应的模块文件夹里创建schema文件夹。创建xx.schema.ts

例如我的是users/schemas/users.schema.ts

import * as mongoose from 'mongoose'

export const UserSchema = new mongoose.Schema(
  {
    id: Number,
    name: String,
    introduction: String,
    headurl: String,
    bigurl: String,
    username: String,
    password: String,
  },
  { collection: 'musicers', versionKey: false },
)

对应的是上图的表结构(collection:可以看作MongoDB中的一个表。)
接下来在相对应的users.module.ts模块进行配置添加

import { Module } from '@nestjs/common';
import { MongooseModule, getModelToken } from '@nestjs/mongoose';
import { UsersController } from './users.controller';
import { UsersService } from './services/users.service';
import { UserSchema } from './schemas/users.schemas';

@Module({
  imports: [
  //这里添加配置。对应引入模块(注意里面的括号结构别给坑了。这里我卡了半天)
    MongooseModule.forFeature([
      { name: 'User', schema: UserSchema }
    ])
  ],
  controllers: [UsersController],
  providers: [
    UsersService,
   ],
})
export class UsersModule {}

这么配置好后。我们就可以在service端操作了

service端 => users/users.service.ts

咋们就拿一个查找来测试

import { Model } from 'mongoose';
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { User } from '../interface/users.interface';
import { IUserService } from '../interface/user-service.interface';


@Injectable()
export class UsersService implements IUserService {

  constructor(@InjectModel('User') private readonly userModel: Model<User>) {}
  
  private static users:User[] = [ ]

  async findAll():Promise<User[]>{
    //return UsersService.users
    return await this.userModel.find({})
    //( 这里我们测试查找全部 )
  }

}

controller端 => users/users.controller.ts

@Controller('users')
export class UsersController {
  constructor(private readonly userservice: UsersService) { }

@Get('getall')
  // @UseGuards(AuthGuard('jwt'))
  async findAll():Promise<User[]> {
    return await this.userservice.findAll()
  }
}

我们开一个接口出来
这里的3001是在main.ts中自定的。根据自己情况更改
然后我们可以访问
http://localhost:3001/users/getall

NestJs使用Mongoose对MongoDB操作的方法

得到了结果

NestJs使用Mongoose对MongoDB操作的方法

输出完成。其他操作也是根据类似的步骤进行

到此这篇关于NestJs使用Mongoose对MongoDB操作的方法的文章就介绍到这了,更多相关NestJs操作MongoDB内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
return false,对阻止事件默认动作的一些测试代码
Nov 17 Javascript
jQuery源码分析-04 选择器-Sizzle-工作原理分析
Nov 14 Javascript
jquery实现类似淘宝星星评分功能有截图
Sep 15 Javascript
利用a标签自动解析URL分析网址实例
Oct 20 Javascript
JS获取鼠标相对位置的方法
Sep 20 Javascript
详解JavaScript树结构
Jan 09 Javascript
javascript 中iframe高度自适应(同域)实例详解
May 16 Javascript
jQuery实现滚动效果
Nov 17 jQuery
浅谈es6中export和export default的作用及区别
Feb 07 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
May 17 Javascript
vue.js实现格式化时间并每秒更新显示功能示例
Jul 07 Javascript
bootstrap实现嵌套模态框的实例代码
Jan 10 Javascript
linux服务器快速卸载安装node环境(简单上手)
Feb 22 #Javascript
k8s node节点重新加入master集群的实现
Feb 22 #Javascript
js实现简单图片拖拽效果
Feb 22 #Javascript
用vite搭建vue3应用的实现方法
Feb 22 #Vue.js
详解Vite的新体验
Feb 22 #Javascript
详解Vue3.0 + TypeScript + Vite初体验
Feb 22 #Vue.js
Nest.js 授权验证的方法示例
Feb 22 #Javascript
You might like
PHP SQLite类
2009/05/07 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
详谈PHP中的密码安全性Password Hashing
2017/02/04 PHP
php关联数组与索引数组及其显示方法
2018/03/12 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
为Plesk PHP7启用Oracle OCI8扩展方法总结
2019/03/29 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
DOM 基本方法
2009/07/18 Javascript
js的逻辑运算符 ||
2010/05/31 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
原生JavaScript实现异步多文件上传
2015/12/02 Javascript
学习使用Bootstrap页面排版样式
2017/05/11 Javascript
vue中v-model动态生成的实例详解
2017/10/27 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
vuex存储token示例
2019/11/11 Javascript
复制粘贴功能的Python程序
2008/04/04 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
python线程池(threadpool)模块使用笔记详解
2017/11/17 Python
Python中optparser库用法实例详解
2018/01/26 Python
Python图片转换成矩阵,矩阵数据转换成图片的实例
2018/07/02 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
Python 转换文本编码实现解析
2019/08/27 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
英国最受欢迎的平价女士时装零售商:Roman Originals
2019/11/02 全球购物
俄罗斯外国汽车和国产汽车配件网上商店:Движком
2020/04/19 全球购物
C语言笔试题回忆
2015/04/02 面试题
门卫岗位职责
2013/11/15 职场文书
前台领班岗位职责
2013/12/04 职场文书
测绘工程专业求职信
2014/07/15 职场文书
纪律教育月活动总结
2014/08/26 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
2015教师个人德育工作总结
2015/07/22 职场文书
总经理2015中秋节致辞
2015/07/29 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书