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 相关文章推荐
控制打印时页眉角的代码
Feb 08 Javascript
javascript parseInt() 函数的进制转换注意细节
Jan 08 Javascript
禁止ajax缓存获取程序最新数据的方法
Nov 19 Javascript
JavaScript也谈内存优化
Jun 06 Javascript
使用JavaScript实现连续滚动字幕效果的方法
Jul 07 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
Aug 03 Javascript
Laravel中常见的错误与解决方法小结
Aug 30 Javascript
使用get方式提交表单在地址栏里面不显示提交信息
Feb 21 Javascript
详解webpack 打包文件体积过大解决方案(code splitting)
Apr 10 Javascript
React实现全局组件的Toast轻提示效果
Sep 21 Javascript
详解JS实现简单的时分秒倒计时代码
Apr 25 Javascript
JS+CSS实现3D切割轮播图
Mar 21 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
开源SNS系统-ThinkSNS
2008/05/18 PHP
PHP批量生成图片缩略图的方法
2015/06/18 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
javascript删除option选项的多种方法总结
2013/11/22 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
jquery增加和删除元素的方法
2015/01/14 Javascript
JavaScript的Date()方法使用详解
2015/06/09 Javascript
详解JavaScript的另类写法
2016/04/11 Javascript
Javascript点击其他任意地方隐藏关闭DIV实例
2016/06/21 Javascript
Nodejs全局安装和本地安装的不同之处
2016/07/04 NodeJs
js删除Array数组中指定元素的两种方法
2016/08/03 Javascript
最棒的Angular2表格控件
2016/08/10 Javascript
Jquery把获取到的input值转换成json
2017/05/15 jQuery
让Vue也可以使用Redux的方法
2018/05/23 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
基于Vue.js与WordPress Rest API构建单页应用详解
2019/09/16 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
Vue 实现简易多行滚动&quot;弹幕&quot;效果
2020/01/02 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
vue使用map代替Aarry数组循环遍历的方法
2020/04/30 Javascript
详解vue 组件
2020/06/11 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
python修改字典内key对应值的方法
2015/07/11 Python
Python算法应用实战之队列详解
2017/02/04 Python
python利用socketserver实现并发套接字功能
2018/01/26 Python
Mac下Anaconda的安装和使用教程
2018/11/29 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
WebSphere 应用服务器都支持哪些认证
2013/12/26 面试题
Java基础知识面试题
2014/03/25 面试题
职业教育毕业生求职信
2013/11/09 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
淘宝店策划方案
2014/06/07 职场文书
2015公司年度工作总结
2015/05/14 职场文书
python通过opencv调用摄像头操作实例分析
2021/06/07 Python
详解Python中*args和**kwargs的使用
2022/04/07 Python