在node环境下使用Mongoose来操作MongoDB

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 在node环境下使用Mongoose来操作MongoDB

一. 准备工作


在create-react-app 脚手架工具的src文件夹创建pages/Server/server.js做好前期准备工作。

image.png

二. 前置文件安装


yarn add mongoose ,yarn add express,yarn add nondemon

三. 理清概念


我们要知道要使用mongoDB数据库,你必须先启动mongoddb的服务,默认地址是localhost:27017,才可以操作数据库,在这里我们需要首先要分清楚和通过node express创建端口号的区别。

前端发起的请求如get,post等这些方法,你如果直接给localhost:27017发送,数据库是无法处理这些数据的,它身上不存在响应这些方法的api。不然要后端干什么,你前端直接都能和服务器交流了,后端就没什么存在的意义了。

那怎么办呢?数据获取不了我没办法下班啊,这时候就需要后端来当这个中间人。后端的语言正好可以用来识别前端发过来的请求,并且还可以访问数据库,这不正好当这个红娘吗?

server.js这个文件就是后端来编写代码的地方,来设置不同的端口号和请求方法来区分数据库里数据的类型。比如买汽车,汽车里面有轿车,跑车。那么后端就可以给轿车先区别一个端口号1000,给跑车一个端口号2000,然后再细分,用来方便快速的获取不同类型的数据。

localhost:2701727017仅仅是让后端来找到数据库的,你前端知道这个地址是没什么用处的(你暂时可以这样理解)因为你的js语言写出来的代码,数据库不认识。

四. 链接mongoDB


我们都知道mongoDB有可视化软件compass,任何可视化软件的流程都是底层代码来执行的,你首先要理清楚这一点。那么你就可以很轻松的掌握在编写代码的时候,我应该以什么顺序来完成前期的工作。

这里一进来就需要我们选择链接一个服务地址

image.png

那么对应的我们的代码第一步也是链接

image.png

链接好以后就是创建数据库

mongoose提供了三个最最重要的对象,Schema,Model,Document,这三个模块使用的先后顺序是必须先Schema,Model,Document的。Schema相当于约束你这个集合里必须有的值,不然整个数据库乱套了。

image.png

想用就得先引入,这里可以选择es6的结构赋值,也可以变量赋值。

首先要清楚,你的数据库里不可能只有一个集合,所以不同的集合的Schema也不同,这时候就需要单独设置,Schema就是一个构造函数

image.png

你定义的userInfoSchema就是实例化了它,变量名字可以随便定义,这不是最终的集合名称。 注意到这一步,你仅仅是规定了集合的文档里需要有什么内容,而不是创造了这个集合。下一步才是创造集合,我们需要使用第二个重要的对象Model

image.png

model方法接受两个参数,第一个是你集合的最终名字,第二个参数是集合的Schema。

在这里和直接在mongodDB shell里略微有些不同。你在shell里是直接根据集合名称来操作的如db.userInfo.insert({}),但是在mongoose里,他并不是直接使用集合来操作,而是使用你前面的那个变量名,通常我们可以把它直接设置为和集合相同的名字。

image.png

但是,这个时候因为userinfo这个集合里还没有文档,所以这个集合还并没有保存到服务上,所以我们需要创建一个文档对象,注意了,这里不是collection.insert()方法了,而是clooection.create(),使用方法和insert基本相同

image.png

在compass里可以看到已经成功插入.

image.png

五.model.find()的一些相关条件查询


image.png

image.png

上面这段话的意思是, 1.第一个参数:找到userName为admin1的用户列表

2.第二个参数:并且只显示userName属性,且不显示_id属性,(需要知道的是,mongodb默认会返回_id

3.第三个参数:跳过第一个,并且只显示一个 条件结果。

4.第四个参数:一个函数,该函数必须填写,第一个结果是err,如果查询失败,会把失败的结果返回给第一个参数,如果成功会把我们查询的结果返回给第二个参数。 为什么该函数必须填写呢?因为我们的业务逻辑就是在这个回调函数的第二个参数里执行的,你光找到数据了,没处理,那么你调用find有什么意义呢?

注意find()是返回的是数组,需要加索引来获取内容,docs[1].xxx.

findOne直接就是一个对象。可以直接用docs.xxx获取相对应的属性。

六.document的一些增删改方法


1.1增


上面通过model可以进行对文档,也就是数据的一些添加,我们还可以直接通过对文档的操作来进行数据的添加。因为model也是一个构造函数,那么我们就可以直接在model身上实例化。

image.png

这时候你去查看数据库,发现它并没有被添加到 userInfo这个集合里

image.png

这是因为你只是在代码的世界里创建出了一个变量user_2,如果想保存进model内,就需要调用user_2.save()方法

image.png

image.png

即可看到插入了一条新数据。

1.2改


你既然都已经拿到user_2这个实际的数据了,那update也太so easily了。

你可以通过两种方法来实现。

1.user_2.update({$set:{userName:"admin3"}});或者更加简单直接,提个醒,user_2是你实例化的一个对象,还想不起来吗?

2我反手直接修改这个对象的属性不就好了吗?.user_2.userName="admin4"但是注意,你这一步只是修改了代码世界里的变量,别忘了执行user_2.save()

1.3删


user_2.remove()还是那句话,不建议直接删除数据,而是给需要删除的数据一个额外的属性,例如user_2.isdelete=true以后来通过find()方法筛选掉这些isdelete为true的就可以了。(这里要注意,你的Schema里如果没有这个属性,你是无法加入这个属性的)

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
16天前
|
缓存 JavaScript Ubuntu
Node.js环境怎么搭建?
【8月更文挑战第4天】Node.js环境怎么搭建?
24 1
|
1月前
|
DataWorks NoSQL fastjson
DataWorks操作报错合集之DataX进行MongoDB全量迁移的过程中,DataX的MongoDB Reader插件在初始化阶段找不到Fastjson 2.x版本的类库,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
1月前
|
移动开发 运维 JavaScript
阿里云云效操作报错合集之遇到Node.js的内存溢出问题,该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1月前
|
JavaScript Shell 应用服务中间件
阿里云云效操作报错合集之Node.js构建报错,该如何排查问题
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
1月前
|
JavaScript IDE 持续交付
阿里云云效产品使用合集之如何配置 Node.js构建任务让其在Windows环境中进行
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
2月前
|
存储 NoSQL Linux
【MongoDB】下载安装、指令操作
【MongoDB】下载安装、指令操作
107 1
|
2月前
|
分布式计算 DataWorks NoSQL
DataWorks操作报错合集之从MongoDB同步数据到MaxCompute(ODPS)时,出现报错,该怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
DataWorks操作报错合集之从MongoDB同步数据到MaxCompute(ODPS)时,出现报错,该怎么解决
|
1月前
|
资源调度 前端开发 JavaScript
如何在Node.js环境中安装并使用Bower和LESS
【7月更文挑战第2天】在Node.js环境中,掌握Bower和LESS的使用对前端开发至关重要。安装Bower(全局`npm install -g bower`)用于管理前端资源,通过`bower init`和`bower install`管理依赖。LESS作为CSS预处理器,通过`npm install -g less`安装编译器,用`lessc`命令编译LESS到CSS。虽然Bower已进入维护模式,但理解其用法仍有价值。同时,学习使用Sass或Stylus等预处理器以适应现代前端趋势。
62 0
|
2月前
|
运维 JavaScript Devops
阿里云云效操作报错合集之node.js构建时,报错:The build failed because the process exited too early.该怎么办
本合集将整理呈现用户在使用过程中遇到的报错及其对应的解决办法,包括但不限于账户权限设置错误、项目配置不正确、代码提交冲突、构建任务执行失败、测试环境异常、需求流转阻塞等问题。阿里云云效是一站式企业级研发协同和DevOps平台,为企业提供从需求规划、开发、测试、发布到运维、运营的全流程端到端服务和工具支撑,致力于提升企业的研发效能和创新能力。
|
2月前
|
NoSQL JavaScript MongoDB
Node.js 连接 MongoDB
Node.js 连接 MongoDB
26 0

热门文章

最新文章