在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
相关文章
|
2月前
|
NoSQL 前端开发 JavaScript
Node.js 连接 MongoDB
10月更文挑战第20天
37 0
|
2月前
|
NoSQL 前端开发 JavaScript
Node.js 连接 MongoDB
10月更文挑战第9天
52 0
|
2月前
|
JavaScript NoSQL 前端开发
使用 Node.js 和 MongoDB 构建实时聊天应用
【10月更文挑战第2天】使用 Node.js 和 MongoDB 构建实时聊天应用
|
4月前
|
JavaScript NoSQL 前端开发
|
5月前
|
DataWorks NoSQL fastjson
DataWorks操作报错合集之DataX进行MongoDB全量迁移的过程中,DataX的MongoDB Reader插件在初始化阶段找不到Fastjson 2.x版本的类库,该怎么办
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
6月前
|
NoSQL JavaScript MongoDB
Node.js 连接 MongoDB
Node.js 连接 MongoDB
45 0
|
2月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
3月前
|
存储 NoSQL 关系型数据库
非关系型数据库-MongoDB技术(二)
非关系型数据库-MongoDB技术(二)
|
1月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
2月前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。