00:00
那接下来进入到我们这个下一个知识点,我们叫做一个mongoose mongoose,我们来看这名字,就十有八九能猜到它肯定跟mango有点关系是吧?跟mango有点关系,那这东西是干嘛的?那我们先想想啊,我们之前去操作数据库,我们都是怎么操作的。要么CMD,我们这来一个mongo,哎,我在这客户端连接猫DB数据库,对吧,要么通过我们这个no solar manager或者其他的工具来连接数据库,是不是对数据库进行操作呀?哎,那我们想想,那我们现实的开发中,就是我们项目里,我会不会以这种方式操作数据库,肯定不会,为什么,因为我这是不是还得人手动去操作呀?那么想想我们要是开发里边,你假如说来个用户注册了,注册我要把用户名密码等等一系列信息到数据库里啊,那你想想这事能让人去干吗?
01:00
人假如说一来网站开张了是吧,诶来用户注册的赶紧拍个人,专人负责干嘛呀,负责存用户密码,说诶来个用户了,你去小张去把用户密码存到数据库里去,诶来用户登录了是吧,小张去看看用户的用户名,密码输的对不对,那这就封了是吧,这就封了,所以我们真正对数据库操作应该怎么办?是不是应该用我们的程序啊,我应该编写代码,这个程序要对数据库进行操作,而不是我们这种手动输入指令去操作,而那我们怎么要通过程序才能操作数据库呢?那这一块就说到了我们的什么呀,我们的一个mongoose mongoose什么玩意呢?Mongoose是我们这个node里边的一个模块啊,一个模块,这个模块是干嘛的?这个模块的作用就是让我们可以通过load来操作我们的mango DB这个什么呀,数据库啊,通过这个玩意儿就可以直接在load GS里来编写。
02:01
点程序操作mongo DB懂这意思吧?哎,它就是一个模块,让我们通过noe给操作这个mon DB,那其实在我们node里边原生也有一个模块,就叫mango DB,也可以用来操作什么呀,数据库,但是我们说了为什么不用那个而用这个mangos,为什么?因为那哥们儿操作起来非常非常的麻烦,而mangoose实际上是在那个模块上做了进一步的什么呀封装,让我们操作起来变得更简单,更优雅,所以我们选择使用什么呀mongoose,当然还有一些其他模块,我们就不说别的了,我们主要说我们讲的这个,诶诶,那我们这个mangoose它叫什么呢?它叫做一个对象文档模型库,或者我们叫什么呀,叫ODM库,哎,你看这名跟我们这个DOM是不是一样的呀,DOM是DOM,它叫ODM就是把O和D掉了一个,剩下的每一个单词都是。
03:01
一个意思,Object d document m叫什么呀?Model啊,也它叫对象文档模型,那为什么叫这个名,那注意了,对象指的就是我们GS,对象文档呢,指的就是我们数据库里的文档啊,那我们说了为什么叫对象文档模型,它就是什么呢?把我们数据库里边所存的这些文档,比如说。就这些文档,那这是不是就一个一个文档啊,将它干嘛呢?映射成了我们NOEGS里的一个一个的对象,也就是这些东西到我们note GS里全都变成了什么呀?对象啊,全都变成对象,那我们通过对对象的操作就可以来操作什么了。数据库了,说白了它的作用就是让我们以面向对象的形式去操作什么呀,数据库啊数据库,那这块我们来说,大大多数情况下,它会用来把结构化的模式应用到一个mongo DB结合并集合,并提供了验证和类型转换等好处,那这个我们先不说它,我们在这儿来单独说一下mon古ose的一个好处,第一个好处,也是它最为突出的一个好处,可以为文档创建一个什么呢?模式结构这个名儿啊,起的挺到位的,因为一般人谁看到这玩意谁懵,什么叫模式结构对吧?哎,英文叫什么呢?叫chemer,哎,Mer,那我更习惯于称它为叫做约束,哎,约束。
04:32
约束的约,约束的束,这俩字一看这俩字都知什么意思吧,什么叫约束,什么叫约束?我们学了这么长,学了也没多长时间是吧?一天来的这个mango DB,我们会发现mango DB给我们的一个好处就是操作起来非常的灵活。我们之前举例子了,我们的关系型数据库,我创建一个表,我规定它能存什么数据,它一辈子都只能干啥呀,只能存这个数据。我们举例子,我们说了,这是一个关系型数据库,我这整完了,这是一个鸡窝,鸡窝里边只能放什么,放鸡,这是一个猪圈,猪圈里边只能放什么,只能放猪,能这个意思吗?而我们猫购DB的数据库干嘛呀?这个集合没有任何约束,你这里边是饥窝,你说你想放个放个马,放个大鹅,想放什么干嘛呀,就能放什么,他有没有约束,没有任何的约束啊,没有任何的约束,那我们说了这。
05:32
那就是什么呀,它是一把双刃剑,没有约束就意味着什么,你放进的数据,其实有一些情况下,我们希望是什么呀,是有约束的,比如说像这种我这是有一个salary,你salary假如说我这么放,我来什么呢?DB点一个emb点一个这个银色的,我来一对象他妈随便写一个三个来一个hello。来我这一直行,呃,这块我分号写错了,来一喝依然错了是吧,再执行是不是超入一个啊,那这时候我一查询我们来看,这就很很奇怪了,情况在哪儿啊?首先说有一个特别奇怪的人,没有编号,没有姓名,没有工作,什么都没有,就一个什么呀,Salary,而且salary还是一个什么呀,是个hello,用这个看你会觉得挺奇怪,其实如果用我们这种传统模式去看的话,直接用这个结果去看,其实下边是候就一个文档,它这边就一个属性叫什么呀,这这salary sal值是什么呀?值是hello,那问你了,它的值应该是hello吗?不,你看它的值是不是应该是我们这个一个number啊,哎,首先这个值不对,第二一个。
06:46
字段对不对呀,编号也没有,名字也没有,工作也没有,是不是什么东西都不全呀,所以这块导致什么呀,我们经常如果不小心的话,可能会插入一些什么呀,错误的数据你懂意思吧?哎,错的数据,所以这scner我们叫做一个模式结构,这个东西是干嘛的?有了SC以后,虽然mango DB里没有对我们进行约束,但是在mongos里边,我们可以通过SC对这个文档进行什么呀约束,约束主要约束什么?第一个字段我需要四个字段,你给我来三个,那就不行,我需要三个段,你给我四个那也不行,对吧?字段必须跟我的是一样的啊,最好跟别人一样的,这是第一个,那第二一个我这个字段需要的是number类型,结果你给了我一个string,那怎么办?哎,我先尝试类型转换,能转我给你存,转不了,对不起,进不来,能理解吧,它这相当于干嘛呀,相当于在我们数据进入到数据库之前,它。
07:46
多了一步干嘛呀,检验验证,确保的数据是对的啊,确保数据对的,然后第二一个可以对模型中的对象文档进行验证,这个其实主要说的什么呀,一个是就是因为有了约束,我们可以对它进行验证,那数据可以通过类型转换转换为对象模型,也就说你的数据如果不对的,我可以马呀自动做类型转换等等一系列,然后可以使用中间件来应用业务逻辑的挂钩,那这一块就是说我们往后再去写这个web服务器的时候,有些业务逻辑就可以和我们它结合到一起,然后呢,比noe原生的芒GODB驱动更什么呀,更容易啊,咱们也没用过,那个容不容易咱们就不管它了,反正就是简单一点啊,简单一点好。总之Mo最大的好处其实对我们来说就是这个什么呢?SKY啊,就是这个约束啊,就是这个约束,好,然后我们来看mons里边呢,给我们提供了几个新的对象,这几个新的。
08:46
对象给他记住了,第一个我们叫做STEM,我们叫什么呀?模式对象,这个对象是干嘛的,是用来约束数据库中的文档结构的,就是规定什么呀,你这文档里有几个字段,字段什么类型,哪个字段是必须的,哪个字段是可选的,都有我们这个stemmer来约束啊,STEM我们的约束对象。然后下一个叫做model model模型,模型是干嘛的,这里边都不用管,模型是干嘛的,模型记住了,它和数据库里对应的是我们的集合,我一个模型就对应着我数据库里边的一个集合,比如说department,这就是一个什么呀模型,Numbers就是一个什么呀模型,我们的文,我们的note里边,这个模型对应的就是我们数据库里边什么呀集合啊,Model对象作为集合中所有文档的表示,相当于mango DB数据中的什么呀?集合collection,这model就对应的是这个集合,然后再来说一个document是什么,很明。
09:46
呀刀那叫什么?代表的是文档,就相当于我们集合里边的某一个具体的什么呀,数据啊,文档,这就是一个及格,这也是一个及格,这也是不是这个document啊,这是文档,这是文档,这也是个文档,每一个文档都是一个document啊,Document好,那这也是我们说一个结构,注意这三个对象啊,STEM模式对象,猫的模型对象,Document文档对象,而且这三个对象的创建是有顺序的,我得先创建什么sche,然后再创建model,因为我需要用stemmer去约束model,然后再创建什么呢?Document,因为我得需要通过model去创建document,所以他们的关系一定是先有STEM,再有model,再有document啊好,这一块说完了,然后这里边我们就就不废话了,哎,我们开始用呗,这东西怎么用啊?
10:40
先打开我们这个web。怎么用吧,来,那我们在这写一个这个先来创建一个新的文件夹。来一个零三,我们叫做一个mon go SE mangoose mongoose里边我们为了待会方便一点,确保没问题,我创建一个拍age.j森这个文件,文件里边我都给它删了,就叫这名儿了,我就不改了,然后呢,我们这来新建一个这个JS文件,我们叫一个零一,叫做一个hello mongoose。
11:22
Hello mongoose,那好,那现在我们来说,我要用mongoose,我们得先干嘛,先说一下使用的一个步骤,第一步我要用mongoose得先干嘛,先要干嘛,哎,我们需要这块注意了,Mongoose不是我们note里边自带的,它是一个第三方的,所以第一件事我们先要,哎,下载安装mongoose。想不到是吧?哎,下载安装man果S,第一步就是先看它,那怎么下载NP m I mongo SE,然后杠杠save啊下载安装我们这个mangoose,来我们来走一个在这现在我在CLASS0705下,我是不应该进入到mangos的文件夹呀,所以在这CAD来一个03MANGOS,然后调用NP mi一个这个mon go SE,杠杠SE安装并添加到E赖啊然后回车,那这个就稍微的大一点了,它需要稍微花这点时间,咱不用着急,那安装完了以后,第二步该干嘛了,是不是引入啊?哎,第二步在我们的这个诶项目中,哎,我要引入我们这个mon古ose,哎,怎么引入啊,Y一个mon mongoose等于reqqui require。
12:45
一个这个芒古。哎,Require一个manose,那现在咱们稍微等一下,还没下载完了,那引入完了mangoose,第三一步该干嘛,第三部该干嘛了,我们想想猫bos下载完了,也引入了,准备工作都完成了,接下来就干嘛了?哎,那其实一定注意,我们的任何的程序的操作都是对我们真实操作一个抽象,那现在我问你,我要想去操作数据库,咱们用图形化界面去操作,我要怎么操作,我怎么操作。
13:22
怎么操作,我是不是得先打开我的这个客户端,然后呢。我得点那加号吧,点那加号在干嘛?哎,我是不是在连接mongo DB数据库啊,所以在这我们也是第三一步就是连接mongo DB数据库,哎,连接我们这个mongo DB这个数据库,天呐,哥们还没下完呢是吧?这马上都说完了是吧?哎连接数据库怎么连在这儿,我们来看一下啊,因为它这块注意mango更新还挺快的,所以这块每一次代码它可能会有一些细节的调整,所以连接的方法干嘛呢?我们来打开这个文档来看一下,其实一上来我们就看到了,第一步是不是引入mangoose啊,第二步它掉了一个mangoose什么呀,看耐我粘过来啊,粘过来来CTRLV后边这个,其实呢,这玩意儿我不用管它,这不写它直接写这个,那这个就是我们连接mango mongo mongo DB数据库的一个代码,那实际上就是掉了mongos里边的一个什么呀,Connect的。
14:29
方法看到了吗?哎,看那方法首先后边不管呢,我们看前边,前边写的是一个什么,哎,Mango DB这个是固定的,这表是什么呢?我们所使用的协议,也就说你像我们上网是不是输入什么HTTBHTPS呀,那在这我们用的是mango DB这个协议,然后long house这是什么呀?哎,这是我们数据库的一个IP地址,RI地址,然后后边其实应该还跟着一个冒号,一个端口号啊,端口号,然后这儿还一个什么呢?这应该是我们这个数据库名啊,数据库名什么意思,我要连接mango DB数据库,我是不是有可能有很多数据库啊,那你到底要点哪个,你是连local,是买T还是连T,你在那干嘛呀,得指定啊,得指定,然后再说这个端口号东西,刚才我们看他给我们的例子,他有没有写端口号,没有写,为什么。
15:29
哎,注意啊,我们来说,如果咱们在下边写,呃,如果端口号是我们这个默认端口号,也就是谁呀,27017则可以省略不写,如果你不是它,那对不起,你得干嘛呀,写上了,只要是27017你就可以省略啊,你可以省略好,那这就是我们说的这么几个步骤,我的天呐。
16:02
我这故事都说完了,哥们儿还没下完呢,是吧,下了这么一小丢丢是吧,咱们接着来说,那接下来还说什么呢?其实没什么可说的是吧?哎,还有一个就是,那现在我们说了我们连接到mango DB数据库,那其实我们还希望有一件事,我们要知道,要知道什么,我是要知道我这个数据库到底连没连上啊,哎,连没连上,所以还有一件事我们可以做,但这个事不是必须的,所以在这写可以什么呢?可以监听我们这个mango DB数据库的一个连接状态啊,可以监听我们这个mango DB数据库的一个连接状态,那这块我们要说一下,在文档里,在在这个PPT里边我们来看一下,那实际上当我们连接到mango DB数据库里边以后呢,它会有一个对象叫做connection connection什么意思,叫做数据库连接?来我们这来说一下,在我们这。
17:02
这个芒果这个对象。嗯,它有一个这个什么呢?有一个这个属性叫做什么呢?叫做这个connection connection con connection什么意思?连接啊,连接,那我们说该对象表示的就是我们这个数据库连接啊,表示的就是我们这个数据库连接,通过监视该对象的一个状态,为以什么呢?可以来监听我们这个数据库的这个连接与断开啊,可以监听数据库的连接与断开,所以注意,如果你希望监听数据库的连接与断开,你要监听的是谁?并不是mongoose,而是mongoose里边的什么呀,Connection啊,而是mongoose里边的connection,那他这里边我看他有没有写视力代码啊,他这块也也没写,那我们就直接写了,怎么监听呢?直接来一个mongoose。
18:05
点一个connection,因为是监听这个属性嘛,点一个什么呢?点一个ones,我给它绑定一个一次性的事件,一个什么事件呢?我们叫做一个open open在这里边来一个这个function,那这块很明显你看到意思就是什么呀,当数据库连接打开的时候,这个函数是不是会触发呀?哎,数据库连接的时候,这个函数会触发,那还有一个什么呀,还有一个close,哎,这是我们这个数据库连接的一个数据库,哎,连接成功的一个事件,下边这个是什么呢?完了,估计这哥们儿是下不完了是吧,这是数据库我们这个断开的一个这个事件啊,断开事件啊,好,那我现在能说的基本上都说了是吧?哎,要说还有最后一个,我们叫什么呢?叫做一个断开数据库连接,这个方法名比较长,叫做Dis connect。
19:07
哎,第四一步我们来写什么,第四一步断开数据库连接,叫做一个mangos,点一个Dis connectnect这个方法,但是注意这玩意儿一般不掉。这个东西一般不需要要好不管它了啊,这几个步骤我们都列全了,列全了它还没整没整完,咱们再整一遍吧,啊CTRLC给它终止,然后再我再再来一遍,我再试试NPM是吧,我再试NPMNPM再再不行呢,咱们就只能呦呵呦,感觉换了一个人是是吧,刚才他们是不是用了假的NPM是吧?诶好,那现在整完了以后,我们发现这模块是不是已经下载下来了,你看东西多不多,诶相对来说比较多的mongos是一个比较大的一个模块,比较大一个模块,好这儿下载完了,在这儿我们就是不是可以来使用了,来怎么用,还是按照步骤是不是都写了,第一步我们先来干嘛呀,引入引入我们来一个Y,一个go,等于一个这个require,来一个这个mongo require引入我们这个mangos,引入完了以后我们来。
20:23
连接我们这个数据库,来一个这个mangoose,点一个这个connect connect我们要传一个路径,路径呢,我们叫GODB冒号斜杠,斜杠,那我这一块是不是要连接我本机的数据库啊,所以在这你可以写log house,或者是127.0.0.1对吧,都是本地数据库,然后端口号27017,由于是默认的干啥呀,省略不写数据库名,表示指定你要连接哪个数据库,我要连接的什么呢?Mango m mogo mongo test mongo mongos,一个test要连接这个数据库,当然这个数据库我们有没有了,没有了啊,没有,但是并不碍事,我去连接它啊,能可以连啊可以连,但是其实我光写这个步骤这块啊,看着我一运行走你。
21:11
现在实际上注意数据库干嘛了,就已经连上了,现在就表示我这个数据库其实已经连接上了,你看我程序有没有停,它是不是一个红色一直在一直在亮着啊,这表示我程序现在是一个什么呀?诶一直在运行的一个状态啊,一直在运行一个状态,那也就是说数据库其实就已经连接成功了,我们可以干嘛呢?我把这个事件给它绑定上啊,给它绑定上我来监听一下,当这个事件触发,我们来说出一个cancel.log,一个数据库连接成功,这一保存我们再重启一下啊,点这个玩意重启。礼物。是吧,Connection啊,刚才咱们这个connection拼错了,他已经给我抛线了是吧,告诉我拼错了啊来我们再运行一下走。
22:09
是不是已经连接成功了,哎,事件抓要表示已经连接成功了,但是注意了,他后来就是应该是在今年,应该是在六七,应该是七八月份的时候改了版本,改了版本以后干嘛呢?他这块当我这种方式去连的时候,他要干嘛呀,他给我报了一个错啊,报了一个错,也就说他实际上这个错的意思就是什么呢?它需要我后边再传这么一个对象作为参数,这个对象里边呢,要传这么一个配置参数,叫做一个use mango client什么意思呀,使用mango的一个什么呀,客户端还得要设置成什么呀,True,这样它这才不报这个红色的字,但是这个错其实不影响我们mango DB的一个什么呀运行,但是为了不不让出来出单出来挺烦人的是吧,所以咱们就记住后边传这么一个参数啊,那就是使用那个芒果客户端的一个意思啊,在这儿我们来再运行走你。
23:01
诶是不是没有那红字了啊,没有红字了,然后数据库也连接成功了,但是其实刚才那种情况,它也是可以正常用啊,也可以正常用的好连接成功以后,那接下来我们是不是可以对数据库进行操作了,但是操作的事我们先不着急啊,先不着急,连接完了以后,那现在我还想监听一个什么呢?监听它的一个断开事件,我们用于什么呀?有一个close,诶我们这是还什么呢,数据库也断开。数据库连接已经断开,我这一保存你注意啊,我重启,你说这东西会不会执行,它不会执行,一定注意mango DB数据库一旦连接,它会不会自己断呀,不会自己断呢啊,它不会自己断呢,那你要想什么断怎么办?哎,我们有一个方法叫什么呢?来这块我们来说断开数据库连接,我们叫什么呀,Mongoose点一个Dis connect叫什么呀,断开连接啊那这样我这运行走你我们来看数据库连接成功,数据库已经断开,看到了吗?哎,那这一块这个方法的作用就是什么呀,断开连接,而且你看当我一断开以后,程序是不是就就停了呀,哎,就停了啊,所以这一块是我们的最基本的一个步骤,我们要想先操作数据库,第一件事就是什么呀,连接数据库,那这块注意了必要步骤,就上边这两行第一个。
24:28
引入第二个连接数据库,就上边这两行,下边这个都是不是必须写呀,不是都可以省略不写,因为你说我不需要监听的状态,那这个你就不用写了,而且注意我们的数据库用不用断开,不用断开,它和我们的关系型数据库不一样,注意了,如果你学过Java这些语言的话,你会发现那些关系型数据库我们都有一个特点,我干嘛呢?我要每操作一次就连接一次,每操作一次就连接一次,为什么?因为我们在关系数据库里边有一些东西叫做事物控制,我必须得在每一次连接,在连接还有断开之间进行这个事物的控制,而在我们的这个mango DB非关系数据库里边,它干嘛呀?没有事物控制,所以注意我们mango DB数据库。
25:22
哎,一般情况下,哎只需要什么呀?哎,只需要连接一次啊,只需要连接一次,连接一次以后,除非什么呢?除非我们的项目停止啊,服务器关闭,呃,否则我们的连接一般不会断开啊,否则我们的连接一般不会断开,所以像这个mango disconnect这个方法,我们一般干嘛呀。不会掉的啊,一般不会掉的好,那这一块是我们说的一些基本的使用来,那这块我们先停一下,然后呢,哎,你们需。
我来说两句