共计 2414 个字符,预计需要花费 7 分钟才能阅读完成。
一. 筹备工作
在 create-react-app 脚手架工具的 src 文件夹创立 pages/Server/server.js 做好后期筹备工作。
二. 前置文件装置
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:27017
27017 仅仅是让后端来找到数据库的,你前端晓得这个地址是没什么用途的(你临时能够这样了解)因为你的 js 语言写进去的代码,数据库不意识。
四. 链接 mongoDB
咱们都晓得 mongoDB 有可视化软件 compass,任何可视化软件的流程都是底层代码来执行的,你首先要理分明这一点。那么你就能够很轻松的把握在编写代码的时候,我应该以什么程序来实现后期的工作。
这里一进来就须要咱们抉择链接一个服务地址
那么对应的咱们的代码第一步也是链接
链接好当前就是创立数据库
mongoose 提供了三个最最重要的对象,Schema,Model,Document
, 这三个模块应用的先后顺序是必须先 Schema,Model,Document
的。Schema 相当于束缚你这个汇合里必须有的值,不然整个数据库乱套了。
想用就得先引入,这里能够抉择 es6 的构造赋值,也能够变量赋值。
首先要分明,你的数据库里不可能只有一个汇合,所以不同的汇合的 Schema 也不同,这时候就须要独自设置,Schema 就是一个构造函数
你定义的 userInfoSchema 就是实例化了它,变量名字能够轻易定义,这不是最终的汇合名称。
留神 到这一步,你仅仅是规定了汇合的文档里须要有什么内容,而不是发明了这个汇合。下一步才是发明汇合,咱们须要应用第二个重要的对象Model
model
办法承受两个参数,第一个是你汇合的最终名字,第二个参数是汇合的 Schema。
在这里和间接在 mongodDB shell 里稍微有些不同。你在 shell 里是间接依据汇合名称来操作的如db.userInfo.insert({})
, 然而在 mongoose 里,他并不是间接应用汇合来操作,而是应用你后面的那个变量名,通常咱们能够把它间接设置为和汇合雷同的名字。
然而,这个时候因为 userinfo 这个汇合里还没有文档,所以这个汇合还并没有保留到服务上,所以咱们须要创立一个文档对象, 留神了,这里不是 collection.insert()办法了,而是 clooection.create(), 应用办法和 insert 基本相同
在 compass 里能够看到曾经胜利插入.
五.model.find()的一些相干条件查问
下面这段话的意思是,
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 身上实例化。
这时候你去查看数据库,发现它并没有被增加到 userInfo 这个汇合里
这是因为你只是在代码的世界里创立出了一个变量 user_2,如果想保留进 model 内,就须要调用 user_2.save()
办法
即可看到插入了一条新数据。
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 里如果没有这个属性,你是无奈退出这个属性的)