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 相关文章推荐
改变文件域的样式实现思路同时兼容ie、firefox
Oct 23 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
Apr 22 Javascript
IE中图片的onload事件无效问题和解决方法
Jun 06 Javascript
node.js中的fs.readSync方法使用说明
Dec 17 Javascript
vue-cli入门之项目结构分析
Apr 20 Javascript
JS自定义函数实现时间戳转换成date的方法示例
Aug 27 Javascript
node.js读取Excel数据(下载图片)的方法示例
Aug 02 Javascript
详解微信小程序回到顶部的两种方式
May 09 Javascript
eslint 的三大通用规则详解
May 16 Javascript
js中switch语句的学习笔记
Mar 25 Javascript
微信小程序实现拨打电话功能的示例代码
Jun 28 Javascript
vscode自定义vue模板的实现
Jan 27 Vue.js
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
推荐几个开源的微信开发项目
2014/12/28 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
JavaScript 继承详解 第一篇
2009/08/30 Javascript
关于JavaScript定义类和对象的几种方式
2010/11/09 Javascript
jQuery侧边栏随窗口滚动实现方法
2013/03/04 Javascript
详解JS 比较两个Json对象的值是否相等的实例
2013/11/20 Javascript
jQuery遮罩层实现方法实例详解(附遮罩层插件)
2015/12/08 Javascript
深入剖析JavaScript:Object类型
2016/05/10 Javascript
JavaScript中的splice方法用法详解
2016/07/20 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
zTree树形插件异步加载方法详解
2017/06/14 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
js canvas实现画图、滤镜效果
2018/11/27 Javascript
vue踩坑记录之数组定义和赋值问题
2019/03/20 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
javascript设计模式之装饰者模式
2020/01/30 Javascript
vscode 配置vue+vetur+eslint+prettier自动格式化功能
2020/03/23 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
详解Python list 与 NumPy.ndarry 切片之间的对比
2017/07/24 Python
完美解决pycharm导入自己写的py文件爆红问题
2020/02/12 Python
PyQt5中QTableWidget如何弹出菜单的示例代码
2020/02/23 Python
Python3.7.0 Shell添加清屏快捷键的实现示例
2020/03/23 Python
如何在python中实现线性回归
2020/08/10 Python
python 如何使用find和find_all爬虫、找文本的实现
2020/10/16 Python
Python的logging模块基本用法
2020/12/24 Python
一款纯css3实现简单的checkbox复选框和radio单选框
2014/11/05 HTML / CSS
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
有趣的睡衣和礼物:LazyOne
2019/11/27 全球购物
毕业生在校学习的自我评价分享
2013/10/08 职场文书
房地产管理毕业生自荐信
2013/11/04 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
副科竞争上岗演讲稿
2014/05/12 职场文书
体育运动会广播稿
2014/10/05 职场文书