00:00
那接下来我们就来讲一讲具体的一些东西了,首先我们来说一下这个mango DB的连接,它的标准UI连接语法是什么样的呢?哎,这个稍微有点长,有点复杂啊,我们一点一点解析一下,看一下它是mango DB,这是前面必须要写的关键字,然后后面冒号双斜杠。后边跟可以跟user name password。啊,就是这个是可选的用户名密码对吧?啊,如果我们要是不指定的话,那就相当于是用呃,就是就是没有用用户身份直接登录的这种状态了,对吧?呃,你如果用这样的话,你可以指定用户去登录,要加的话,后面得加个at对吧。然后后边这里有一个HOST1,这个是我们这里边UI里边唯一必须要填写的,就是说mango DB后面跟了冒号双斜杠之后,别的参数都可以不填。这里这个host唯一的一个host name必须得填进去,你至少得指定一个连接哪个host对吧?那我们平常如果在自己本地起鹅的话,大家能想到是不是这就可以写local host呀啊对吧?所以呃,这是HOST1这里啊这个HOST1不是说直接写HOST1啊,说的是我们的一个主机名对不对,Local host啊,然后后面大家就会看到可以跟可选项冒号port。
01:26
所以就是我可以指定logo host,比方说默认是2727多少来着,忘记了啊,27017对吧,默认是这个端口,那大家如果不写的话,那就是24017,如果大家指定的端口不一样,你后面跟上冒号写就可以了。另外大家注意这里。这里。后边还可以跟多个主机地址,那大家看到逗号分割对不对。跟上多个主机地址的时候是什么意思呢?它就是连接到的是一个复制级,就是所谓的呃,Replica set,这个复制级是什么意思呢?其实就是相当于我们配了一套主从,对吧?连接到的第一个一般情况默认当然就是这个不一定啊,后面这大家看到还有一个这个options,这是有连接选项的,就如果我们配主从的话,这个连接选项可以指定哪个是主,或者用什么样的方式,那个比较复杂,我们这里就不详细讲了,就是前面的这些这么多个host,大家可以简单的理解就是我可以指定主从。
02:32
那有可能我们就是前面这个后一是我要连接的主数据库,后面就都是我们的这些备用复用的这些数据库,对吧?啊,我们可以用这种方式去启动啊,这个就真的是非常的方便对吧?呃,然后接下来还有一个是斜杠database,可以有这样的一个参数,这是做什么呢?那大家就就会发现,你如果要是指定了这个user name password的话。那后面可以跟上这个database,就可以指定登录到的这个数据库。
03:04
就可以后面我们一个主机上面,我们的这个启动的mango mango d的这个服务里边可以创建多个数据库,对吧,那你要指定登录到哪个数据库上,那这里就可以指定了,如果你不指定的话,默认打开的是叫做test的数据库。啊,这就是这样的一个一个操作啊,啊说了这么多,这个好像看起来很复杂,很高大上是吧?那连接的时候怎么连,大家看一个例子啊,下面有一个例子,这这个例子是在Linux里面的例子啊,就是点杠go啊mongo,大家看到前面我们启动服务的时候是mongo d对吧?所以这就相当于我们的服务进程守护进程一样,对吧?就像IPFS那个D一样,D一般都是守护进程对吧?然后我们接下来就是点杠mango,这是什么呢?这个mon,这是mongo大家下载安装好之后默认的一个自带的客户端,相当于是所以用它可以去连接我们的一个服务,对不对?所以大家注意啊,这里所谓的连接就是我们已经启用了一个mongo的服务,我们现在要用一个客户端去连上它啊,那大家就可以想到这里是用客户端的形式去连,那如果我们在别处是不是就还应该有别的连接方式,对吧?比方说我们有可能在JS里边,可能也是要把这个uri写进去,我们就去连了,对不对,就像我们在JS里边,呃,连接我们的那个IPFS的服务一样,对吧?连接这个以太访节点一样,所以大家能想到这都是类似的一些方式,那么这个示例大家看到连接方式是什么呢?关键字mango DB对吧?冒号后边双斜杠,然后amin冒号123456AT,这说明这是amin用户密码是123456对吧。
04:55
然后at local host-test,所以这是连接到local host本地启动的mon服务器上的test数据库,对不对,连接到了这个数据库,呃,那其实大家平常的话就是讲的时候给大家讲的这个比较复杂,让大家把这个都清楚啊,如果我们实际要去连接的时候,假如连接的是。
05:18
自己的这个本地的话,那其实非常简单,大家看过直接别的都不要写,直接敲mango。就连上了,因为它默认连的就是127.0.0.1的27017啊,所以大家会发现就是如果说真是在本地起本地想要去测一测玩一玩的话,这个就太简单了,对吧?啥啥都不用配,呃,当然大家很多同学用的是云服务器,那大家就按照我们这里讲的这个UI的这个标准去配一下就可以了,对吧?好啊,大家可以在云服务器上起一个服务,然后本地起一个client客户端去连啊,这个大家可以玩一下就知道了,对吧。好,那接下来我们继续往后介绍这个具体里边的一些操作啊,首先是数据库操作,那database这一块,数据库这一块呢,其实比较简单,就是能操作的是哪几项呢?主要就是这四种操作,首先一个是显示当前,当前用到的数据库是哪个数据库。
06:21
然后呢,还有一个命令是查看所有数据库,大家看这个都非常直白对吧,直接敲DB,就是显示当前的数据库,然后受DBS就是查看所有的数据库。我们在这里可以先大家就直观的来看一下啊,这里所说的所有命令都是在这个client,就是Mo自带的这个shell命令命令行里面去敲的啊,大家就是不管是Windows也好,还是还是这个Linux也好,Ma也好,大家进去之后都是这样的一个环境,所以说这个没有什么区别,我就用Windows来给大家演示了,那大家想我直接敲一个DB,诶大家看,果然test我没有指定是不是默认就是连test啊对吧?Test数据库大家注意啊,这就是我们当前的数据库,那我可以写收DBS对吧?啊大会发现我们这里边就能把我们当前已经有的所有的数据库列出来,大家会看到我这里边已经啊自己自己试的时候,对吧?有有这个DEMO,有E贝,有EBADF这样的数据库,还有local testdmin,这几个,这是大家一开始就什么都没装的时候,什么都没写的时候,默认就应该有的。
07:34
几个数据库,就是admin local test这几个是默认就有的,DEMO应该也是默认有的啊,呃,那至于自己要去创建新的数据库,怎么样去创建呢?呃,那大家可以看到,其实就是非常的简单,就是可以比方说我这里。我现在的数据库是D,叫做test对吧,那我如果想要去用叫EBA的这个数据库怎么用呢?那非常简单,就是use对吧,一倍对。
08:05
大家看它这里提示说Switch to DB倍,也就是切换到了这一个数据库对不对,那我现在再敲一下DB,发现变成了E倍对吧?那同样又是test,那大家看到现在的DB就又回到了test对吧?所以这个都是非常直白的一些用法啊,然后大家就会想到,那假如说我又是一个从来都没有的数据库怎么办呢?假如说我我又是一个比方说我叫APP的一个数据库,对吧。诶,大家看它也能直接切过来,那对大家就会想到,那这样的话,你就相当于是自动的新创建了,对吧?但是大家这里要注意一下,我在售DB的时候,大家会看到我刚才创建的这个APP是不是没有啊,这是为什么呀?临时的。呃,这里跟大家说一下啊,就是mango里边它所谓的这个创建数据库,它其实并没有一个实体性的一个数据库。
09:08
啊,就好像说我们有时候这个创建一个文件夹,大家用GI的话,会发现你如果创建一个新文件夹,应该是呃,就是get认为这个是没有没有更改的对吧。呃,我我不知道现在的这ATE版本是怎么样,我早期的时候用的时候是这样的啊,就是如果创建文件空文件夹的话,Get认为是没有更改的,所以这里边也有点类似,就是你如果创建一个空DB的话,那芒果默认它是没有,就是你去显示DB的时候是没有的,所以你插一条记录,它里面就有东西了。所以这个在model里边这个新建数据库这个操作呢,其实不是特别的重要,为什么呢?因为我们如果要是直接没有这个数据库的时候,我直接用一条插入记录的那条命令,插一条记录插到里面,它自动就会新建出来,所以说呃,大家平常都不用专门去新建数据库啊,这个就我们等一下讲到新建一条这个这个文档,或者新建一个一个表格的时候,再给大家看这个地方啊,那对应的就还有一个叫做删除数据库,那大家可以看到我们现在这里不是收DB,可以看到有一个E倍吗?我如果要想。
10:24
把这个已被删除,怎么删除呢。我可以直接先切到这个E倍来啊,现在DB是一倍对吧,然后我直接DB.drop database,大家可以看到它有自动补全提示的,对吧,我直接点大家会看到drop e OK,对吧?所以大家看到这个shell,这个命令行,这是一个什么风格的命令行啊。它其实就是一个JS风格的命令行,对不对,所以这个这个就是整个这个shell页面,其实是其实是JS写的,所以大家会发现我们如果要是JS这一块掌握熟了之后,之前的GA,呃,命令行GA conso用的熟,对吧?Travelle conso也是这样的一个风格,现在我们换到这个mango的时候,其实也是一样啊,这边都是一样的操作,就可以跟他去交互了。
11:17
啊,所以大家就是可以说是一通百通对吧,学会一个东西别的都会了,好,那么现在呢,看一眼我们现在收地B是什么样子呢,大家会发现是不是一倍就没有了。啊,对吧,这个就直接删掉了,对吧?啊,这就是真的删掉了,那大家会想我刚才就是在EBA里面,那我现在删掉了eBay,那我现在的DB应该是什么呢。大家看还是一位,所以它这个是空的对吧,默认它是空的,但是把它里边的东西都清掉了啊,所以是这样的啊啊这个就是大家了解一下就可以,数据库这块其实还比较简单,比较难的,其实是后边的一些操作啊。
12:02
好,接下来大家想到我们的三个层级嘛,Database最高层对吧,接下来是跟我们传统的那个表格差不多的那一个层级,那个层级叫什么呢。呃,不叫table,在MYSQL里面叫table对吧,我们这里叫collection,叫集合,那这个集合呢,大家就会想到最简单的,呃想法那就是最简单的操作就应该是我应该能新建一个集合,然后还可以删除一个集合,对吧,就是建了之后可以删,大大会想到,呃,另外还有一些操作,应该就是在集合里面插入文档对吧,插入一条记录,那那是跟我们的文档相关了,后面我们再讲,那集合这一部分呢,大家会看到这个命令也非常的简单,新建集合DB.create collection。然后后边跟上name和options。啊,这里稍微跟大家跟大家说一句,大家看一下这个事例啊,这里有一个事例是DB create collection my my column,对吧?这就相当于是MY,这就相当于新建了一个自己叫做MY的一个集合,后边跟的是options options,简单跟大家解释一下kept是什么意思呢?
13:20
Cap true是表示我们当前的这个新建的这个集合,我要求限定它的大小。呃,大家注意,因为我们的这个网购里边的数据库,它的这个集合其实都是不限大小的,可扩展性高就高在这里文档嘛,对吧,你电脑里边只要有空间,你随时往上加,随时往里面添就可以,所以它是不限大小的,那这里就给大家提供了一个可选的方案,就是说假如说我就是想要。啊,对这个存储空间做一些约束,我就是想要做一些强制的这种限定,那怎么办呢?就加上这样的一些可选项,Cap处表示我限定大小,那后边就会跟上这个size对吧?就是具体的这个大小是多少,然后这里还有一个max,就是说我最多插入多少条记录啊,这这里都是可以限定好的,这里还有一个叫auto index ID啊,所以这就是是否打开这个自动把这个ID建立索引的这个这个选项对吧?大家一看这个字面就知道了。呃,这里其实还想跟大家多说的一句,就是如果我们不想去指定这个指定大小的这样的特殊的集合的话,那我们其实可以不用专门去创建集合。
14:41
也就是说,不光这个数据库可以不专门去创建这个,我们甚至可以,呃,就是。呃呃,数据库还是要去创建的啊,因为大家就是说我们一开始肯定要use什么才能去在里面去创建集合,对不对,对吧,那use这个过程当中,尽管我们没看到收DPS还看不到东西,但是其实也算是创建出来了,对吧,那集合这一步呢,Create这是显示的去新建一个集合,如果我们要是没有这种特殊需求的话。
15:13
可以。不直接这么去做,我们直接指定一个集合的名字,然后去往里边插记录就可以了,就直接就能够把一条记录插到对应的这个几何里面去,当然它默认的就是captain,应该是等于false对吧,默认这个大小是就是无限可以增长的,好,这里边我们可以先简单的再把这个实现一下啊,大家看一眼,大家会想到我们就是DB点点collection,呃,不是create对吧。Create collection,呃,那大家可以想到我现在刚刚清掉了E倍,我再把E倍可以再加回来对吧?或者我可以加一个E倍一这样的东西,大家如果要是我后边不加这个选项的话,它就是一个最普通的对吧,无限无限数量的这样的一个集合,大家会看到现在的OK是一对吧,所以我们看一下现在的DB是一倍,那么我们受一下DB。
16:22
大家会发现还是没有对不对,没看到,所以说这个效果就相当于是啊啊这这这里不是不是这样看啊对,我们这是受的是DB对不对,我们现在应该去查看集合对吧,那大家想我们刚才这个创建E被创建在哪里了?1V11V对,就在当前的database下边,对不对,对,当前你在哪个数据库下边,我们就在哪里去创建集合,好那么我们现在看一下,我们要去查询这个当前的集合,怎么查呢?大家其实可以想到我查数据库是收DB。
17:01
那么查集合是不是就是收collections啊,对吧?所以大家可以看到我现在下面就有一个E备一这样的一个collection,对吧?所以大家可以看到这样啊,另外可以告诉大家一个一个就是它的一个别名show class也可以敲什么呢?大家如果觉得这个单词长的话,可以直接敲tables。Show tables也是可以看到1V1的,对吧?所以这个就是大家这里就完全看得出来,Collection跟table就是一个概念对吧?呃,大家可以认为集合就是表,表就是集合好,那么现在我们已经创建了这样的表,呃,创建了这样的一个集合,那接下来大家会想到我能创建就能删,那删这个集合怎么样?怎么样去删呢?啊,大家就会发现啊,这里我们就定义了一个叫做drop的一个方法,跟那个database有点像对吧,但是跟database那边处理不一样,Database是drop database对吧?在当前那个database里边,我们去DB.drop database,而如果要删除一个集合的时候,是这里要加上集合名DB,点集合名点drop,所以大家会发现在这个JS里面是不是把我们创建的这个集合当成了DB这个全局,大家可以认为这是个全局对象对吧,当成了这个全局对象的一个属性啊。
18:26
一个变量对吧,所以大家可以看到它的这个内部的这种实现机制啊,所以我们假如要把刚才的这一个DB删掉的话,大家会想到我们怎么敲呢?DB.e倍一。点drop对吧。大家可以看到返回一个处,这就说明把这个删掉了,对不对,我们show collections show tables吧,这个简单对吧。大家看是不是没了空的对不对,所以现在大就会看到我们可以随意的去创建一个表,创建一个集合,也可以把它删掉啊,那这个课件这里边专门给大家说了,就是一般情况在mango DB里边呢,不需要专门去创建集合,为什么呢?因为就是你朝一个集合自动插入文档的时候,它就会自动创建出来啊,那这个到底怎么插入呢?我们接下来就看一下这个啊。
19:20
就是文档操作,那前面我们讲了两个层级,对吧,一个叫呃,Database,最大的数据库层级,接下来又讲了一个叫做collection集合,这个层级相当于是表,对吧,数据库里面的表,那更更往细化,更小的层级是什么?就是文档document。呃,我们前面说了,它就相当于我们传统MYSQL里边的一个一条记录,对吧,那大家会想到,那我们一条记录肯定就应该有。所谓数据库里边的增删改查对不对啊,这就是基本操作对吧?增删改查所谓的这个,呃,Cardd对吧?C rud,或者大家习惯用这个,呃,如果用过之前的一些这些API什么的话,都对这些操作很熟悉,那么大家看一下在mongo里边怎么样,首先怎么样增呢?怎么样增加一个文档呢?插入一个文档呢?啊插入一般就叫create对吧?C cloudd里边的C,它的方法非常简单,就是db.name这是我们前面建立的那个表名对吧?集合名,然后点insert后面跟上一个document。
20:33
啊,所以大家会发现这里边我们就是全部都调用了,刚才创建出这个集合之后,它就成为了DB下面的一个子属性,然后它里边有各种各样的方法。那前面我们去把它删除的时候,调用的是它自己的drop方法,那现现在我们要往里面插入文档的时候,调用的它的in算方法。那里边这个document是个什么东西呢?Document是一个文档对象,比如说我们可以定义,大家看可以定义document等于这样一个东西,对吧?好,那么我们直接就在这里来实现一下吧,大家会发现这里边它的这个结构其实就是JS一样的,大家比方说在这里边大家可以直接去输入一加二,大家看返回一个三对不对,比方说我可以挖一个A等于一加二。
21:26
大家看一下A是不是就是三,所以这个就大家可以把它当成一个JS控制台来使用,对吧,那大家就会想到,那同样我们可以可以玩,或者说我不玩的话,我直接输入这个变量名,是不是就相当于直接创建出来了,对吧?Document我直接等于一个JS对象,比方说name。啊,我们就用这里面给的这个这个名称吧,叫iPhone对吧,这个我们还是给双引号,就统一给双引号,要不然这个强迫症看着不舒服啊,好,那么他的categoryy,我们就认为它是手机对吧,Cell phone,那么我们可能再给一个value。
22:14
它的这个金额我们给5000,好,那么大家可以看到现在我们就定义了这样一个倒数,对不对?呃,Document,所以这就是跟JS里面的这种用法完全一样,对吧?大家打开JS控制台都是一样用的,好我们定义了这样一个document之后,大家看我们现在show tables,现在这里是不是没有任何的table啊,我们可以直接DB点,比方说我们定义一个叫做product的。对吧,我们想定义这么一个,但是我们没有像刚才那样直接create collection,我们直接就DB.product,然后点insert。
23:04
大家看直接他就说writing result an inserted one,就表示我们插入了一行记录,对不对,这个时候我们再来show一下tables,大家会发现是不是已经把这个product插入进来了啊,这就是我们说的,其实不需要专门去创建这样的一个表,或者说创建这样的一个集合,我们只要往里边指明这个名字,往里边插记录就可以了,插这个文档就可以了,所以它非常的方便,对吧?呃,而且大家会发现。呃呃,这里边我们就提前说一下,就是我们怎么样已经插入了这个文档,我们怎么样去查询呢?这里面有一个简单的命令,就是也是DB.product这是这个的内容,对吧,那查询怎么查有音色的就有放的对不对,Find对吧,那直接一查就查到了我们刚才。刚才插入进来的一条记录,对不对?这条记录大家注意一下,除了name category和value之外,这三个是我们给的,它还有一个奇奇怪怪的一个东西,大家会发现自动生成了对吧?下划线ID,这是mango自动为我们记录生成的一个主件,对吧?就是它的ID。
24:15
它的类型叫object ID,然后后面这一串数字啊,所以大家看到是这样的一个一个机制,那么大家可能就会想到,呃,如果说我这里边去随便的在里边去插的话,我插什么样的东西都可以吗。那真的是什么样的东西都可以,比如说。我们前面定义了这个document是等于这个对吧,那我现在我我就定义,呃定还是name吧,这是iPhone对吧,我还是定义一个name,比方说叫叫Alice,这变成一个人了对吧,那接下来可能就是age。比方说A是25,然后可能给他定义一个city,对吧?City,比方说在北京好,那么大家看到现在的document是这样对不对?那我们继续可以DB.product当然这个爱ice应该是product,对吧?我们不管它,随便把它往里插insert document。
25:22
大家看到也可以插进去,那大家就会想到,那如果我们插进去之后,这成了个什么样子呢?我们find一下哇,大家会发现还真的是,它就是一个Jason对不对?所以说一条一条记录,就像Jason对象一样,挨个往里面塞就可以了,就像文档一样,对吧?我们一个文档里面,难道这个Jason的结构不一样,我们就不能插了吗?当然可以插,所以大家会发现你同样的这一个一个表格,一个collection集合里边的数据结构,没有任何的要求随便往里插啊,这也就就是为什么我们不需要去专门定义表对吧?定义表结构大家如果之前已经讲过,接触过MY的话,那知道我们定义MY里面的东西数据结构的时候,首先你得先create table,对吧,你得定义好table里面这个字段,它是string那个字段,它是什么什么样的类型,对吧,Long in或者是怎么样的,你一开始你把数据结构全定义好,然后才能往里插数据,数据还那个类型不能错的。
26:22
要了还会报错对吧,插不进去,所以大家看这个,这就是这个mango这样的文本类型的数据库,它为什么方便,它尽管可能不能表达那么复杂的关系,但是这个真的是方便,真的是扩展性极强,对吧?所以大家可以先有一个直观的概念。
我来说两句