00:00
刚刚讲到了插入文档对吧?接下来我们来讲这个删除文档,呃,大家会想到这个删除文档的delete d对吧?Delete这一个操作呢,在mango里边不叫delete,叫remove啊,当然不管它叫什么吧,反正都是山啊,这个大家都很熟,大家看一下这一个标准的语法是什么样的,它这里的标准语法呢是。Collection name还是一样的,对吧?调一个叫做remove的方法,这个方法里边可以给参数,而且这个参数会比较大,看起来有点复杂,对吧?首先可以给一个query对象。那这个query呢,就相当于是可以选的一个删除文档的一个条件,那这个条件是什么呢?那我们在这里给大家来试一下啊,比如说大家会看到我们现在里边有这样的两条记录,对吧?那假如说我想删掉那个爱丽丝,我觉得他不应该是一个product对吧?那应该怎么删呢?
01:08
啊,DB.product。点remove对吧?好,那么大家会注意,我们这里边可以给一个啊,就是所谓的这个option对象,Query对象,那么里边要给的内容,其实就是我们指定它有什么样的条件,比如说我们要求name,就是Alice给定这样一个条件。那就可以把这条删掉了啊,所以大家看其实也就是传进去一个对象对不对,那这个对象也是一个key value的一个模式,那其实就是说K是name value等于Alice的这样的一个选项,符合这样的一个条件,我们把它做remove操作,大家可以看到n remove的一对吧?那接下来我们再看一下find是不是只剩下iPhone的一条了,所以这个remove就是很方便也很简单的一个做法,好,那么这里边大家可以看到后边还有一些可选参数,那这个参数呢,就是相当于是一些配置性的参数了,比如说有一个just one just one呢,大家可以想到它是一个波尔型的变量,它可以是false,可以是true,对吧,如果是true的话,那就是只删除符合条件的。
02:29
第一个一个文档,那如果默认当然就是应该是false对吧,符合条件的全删掉啊,所以大家只要搞清楚这个就可以,那另外还有一个叫做right concern的一个东西,它主要是选择抛出异常的级别,里边可以去给一些特殊的参数去配置,这个我们不就不详细说了,一般也不用对吧?呃,大家常规的用法的话,知道这些就可以了,那大家会发现我们这里可以比方说再去把这个爱丽丝插进来,对吧。
03:00
Insert进来,我们翻你一下,现在是两条,大家可能会想到,假如说我就是要做这个操作,是把所有的记录都删掉了啊,那我总不能说是就是,呃,如果要是在那个平常在这个MYSQL里边,大家可能想到我至少还有一个通配符,对吧,我可以有一个芯儿去做操作,那如果说我这里要mango里边怎么样去做操作呢?我不能说它什么什么等于芯,对吧?那其实芒果里面的这个删除操作更简单,大家会看到product remove,就是我们课A。就是我们课件里边给大家最下边列出来的这个,我们给一个空的对象。那这个就表示我们要把所有的东西都删掉,敲一下试试,大家看到a removed,二再看一下放find里边什么东西都没了啊,所以这就是删除里边所有元素的一个一个命令啊啊,当然这个命令一定要小心,就是如果是我们生产环境的话,千万不要随便做这种事情,对吧?这就是传说中的这个,对,从删库到跑路对不对,对,很多这个,呃,企业上来之后,一不小心一个动作删酷了,那所有的用户数据都没了对吧?一看这种操作就是要跑路的节奏,好呃,那么我们接下来这个插入和删除其实都相对来讲比较简单,那么我们接下来看一下更新。
04:31
更新这里大家会看到,就稍微看起来好像麻烦一点了,对吧?啊,那这里边更新的操作命令是什么呢?Update,大家看到所有的这些操作其实都是一样的,对吧?都是DB,它下边我们创建了这个collection集合之后,就有一个相对应名字的一个属性,一个变量,然后它下面就有各种各样的方法,我们可以drop直接把这个。Drop掉对吧,删掉也可以在里边去增删改,查一些文档,那如果要更新的时候用到的就是update update大家会看到后边它的这个参数呢,也有点类似,首先也可以给一个query啊,所以这个query就跟前面一样,对吧?我们删除的时候可以选出对应条件的删掉,也可以选出对应条件的把它改掉,对吧,把它更新掉,所以这个大家能想到,其实这就是我们查询的时候,肯定也是用这样的查询的,所以其实我们应该先讲查询的,但是因为查询相对来讲最复杂,我们放在最后讲好了,好,那么这里有一个query,那后边就是一个update操作,那update的这个对象呢,它就会。
05:45
就是它会指定我们找出来的这按照条件找出来的这些文档里边,我们要更新哪些字段,对不对啊,然后大家又想到我们可以把它更新成什么样子,这个时候就需要可能需要一些操作符,比如说这里边给了两个操作符啊,就是。
06:08
这个Dollar set,那大家能想到这Dollar set什么意思,就是把对应的那个字段值set成什么样子,对吧?Set成一个新的值,或者大家可以这里面去看,还可以有Dollar INC increase,对吧?可以去加多少对,可以给他的那个值去做增量,所以这都是一些简单的一些操作服务,大家如果感兴趣的话,自己可以去查一查呃,Mongo的官方文档,然后去把这些挨个的试一遍,对吧?啊,那接下来我们要说的是这这前面两个算是比较常规的,那下面的这几个其实又都是跟配置相关的一些可选项了,对吧,有一个叫做UPS的一个波尔型变量,它是什么意思呢?它是说upset就是就是也是插入对吧,上向上插入这样一个动作,那么他的意思就是说,如果我们update的时候,我们按照这个条件先去查。
07:04
如果查到就把它update,如果查不到啊,就把它直接插入了,对不对,就相当于insert了,就把它可以用这样的一个方式把它insert进去,那默认的情况这个UPS是false false就是如果查不到的话,就什么东西都不做,对吧,假如它变成true的话,我们找不到,就把一个新的那个文本那个刀亏本的插进去了。好,那接下来还有一个参数叫叫multi multi的话,那其实大家可以想到这是一个就是多项对吧,多个就是这样一个一个字段,那么它也是可选的,默认我们这里边是它是false是什么意思呢?就是我们查只查到,就是只是选出来查到的第一条,然后把它更新。如果我们把这个马变成true的话,那就是你查到多少,我全改全局替换对吧,有点像这个意思。
08:01
好,那最后还有一个就是这个异常的级别,这个就是跟之前都是一样的,通用的一个配置,好那么我们看一下这个,呃,一个例子啊,大家看这个例子是怎么怎么样去写的,这个例子是update,然后前边这就是我们的这个query是不是对吧?这就是你根据什么去选它的name要等于iPhone,然后后边就是它的这个update操作。的操作是什么样的呢?是一个set。我要去赋值了,赋什么值呢?Value给成6000啊,这就是一个标准的赋值对不对,然后后面还跟了这个可选的配置项,它是所有lucky等于true,那就是所有查出来的全改成6000对不对?好,我们看一下它的效果啊,还是实际来操作一下好,我们前面还是少了一些东西,我们还是继续去插一些文本吧。呃,我们在这里直接直接去找这个会不会好一点。
09:06
好,我们直接再插入一个,有了爱丽丝,我们再来个B打头的爆吧。哦,为什么这样?然后A组给一个21,然后CT给一个上海对吧。好,那么现在大家可以看到。哦,之前我们都删掉了,这就悲剧了。好,我们还还是把爱丽丝也插入进来,然后我们可以再插一条对吧,多一点,我们再来个C打头的,之前我们那个投票叫什么凯是吧,配置改成29。City给一个深圳好,那么现在大家可以看到里边有三条记录对不对?那如果说我们想要去更新里边的某一条的话,大家会可以看到我可以用DB点啊,当然这个我们还叫product啊,这人不应该叫product.update大家想到第一个参数其实就是选项对不对?比方说我们要更新的是name对应的这个Alice,我们要去做更新,那更新成什么样子呢?我们可以Dollar set,对吧?大家注意Dollar set后面就是它的k Dollar set,这是操作符,后面是它的值,又是一个对象对不对?冒号一个对象。
10:45
然后后边我们就去要求Alice,我们设成什么样,比方说Alice这个,呃,城市变了,从北京迁到上海去了。
11:00
所以我们就把它的CT付成上海对吧?大家看一下,好,这个我们就是modified成功对不对,Up UPS,这是插入没有插入进去对吧?On,呃,Match,这是匹配上的对吧?根据我们的筛选条件,匹配上的有一个,然后没有插入,然后更新了一条,对不对,它这个结果是这样的一个反馈,好,那么我们现在看一下里边是不是Alice和Bob就都变成上海了,对吧,CPU都变成上海了,所以大家会发现其实这个还是很简单的啊,就是呃,直接就把它搞定了,那大家可以想到,假如说我们现在。要做一个。啊,比方说啊,我们假如说是要把所有的人地址都改成北京,怎么改呢。那我们前面是不是可以直接给一个空对象啊对,就是符合所有条件的对吧,然后set到北京。
12:02
诶,大家会看到我,我明明是要给所有人都改,为什么这里边on match又是一,Modify又是一呢?他改的是谁呀?大家会发现是不是改的,就是找到的第一条对不对,第一条插入的是B,所以就把第一条改了,那所以如果我们想全改的话,怎么改呢?对,后面我们还得加一个东西。在这啊,要把这个参数传进去,对不对,这个要等于出。Hey。爱丽丝了是吧?我们把前面的这个设置要给它删掉对吧?好,然后呃,不不能直接删掉这个我们参数就不对了,对吧?给一个空对象好,那么现在要改成上海,那么大家想到应该有两个对不对,我们直接改,大家会看到所有的匹配有三个啊,就是因为我们前面是空的筛选对象对吧?所以是全部都要筛出来的,那具体的改呢,因为爱丽丝已经是上海了,改的就是两个对不对,所以现在我们看一下这个饭。
13:20
大家发现所有的人都是上海了,对吧?啊,这就是这样的一个状态,好,这里可以给大家多说一点啊,就是。我们在前面这个筛选条件里边,我们这里边给的是就是name是Alice,大家可能想到,那我假如是筛选这个is呢。A,有可能我们是指定这个年龄是21的,也有可能我们是要指定年龄要小于某个值,对不对,比方说我们要指定年龄小于25岁的,那这个东西我们怎么样去怎么样去做呢?啊,那这个其实我们在这里就可以先先不讲这个更更改了,我们继续就讲接下来这个查询,因为大家想到这应该是查询条件里边的东西了,对吧?对查询这里会比较复杂,那更新这里呢。
14:15
我们另外多说一句,就还有一个方法叫做save啊,这个就是多说一句,Save是什么样子呢?大家会发现save跟insert是一样的,后面直接跟一个document啊,所以就是说我们直接定义好那个document之后,直接把它save进去就可以了,那这个save的过程大家就要注意,它就是如果已经有对应的那个object ID的话,它就是覆盖,相当于一个更新,如果没有的话,是不是就相当于insert呀?啊,所以这是save这个用法啊,就是有时候大家如果觉得你不管怎么样,我就给你改了就算了,我根本不考虑什么到底是更改还是插入,对吧,就直接用save就可以好,那接下来我们再看一下这个查询,查询这其实是一个我们这里的一个,呃,相当于是一个重点项了啊,我们这里先给大家介绍一下,首先这个查询的操作大家已经知道了,Find对吧?呃,前面也是collection name,后面跟find,然后。
15:16
那查询这里呢,给出来的两个参数,一个叫query,一个叫projection query我们都知道查询条件对吧,那projection是什么东西呢?Project是投影投射的意思,那这是什么意思呢?啊,其实它就有点像,大家之前学过Mexico的话就知道Mexico,我们可以如果要select she from一个表的话,就是把所有的字段全选出来,对不对?那如果说我们一个表里边字段可能有好几个列是有好几个,对吧?Name age,呃,Self number什么的,那我们可以select,只select name出来,对不对啊,所以大家可以想到我是可以把它一部分选取出来的,那这里面的projection就相当于是一个。
16:03
一个就相当于我们select的时候,Select谁对吧,Select哪几项啊,那么我们看一下这个事例啊,这个事例这里边DB name.find然后它是name是iPhone。然后后面大家注意啊,后面这个project,它的这个投投射像投影像,它指的是什么呢。NAME1杠,ID0,这是什么意思呢?我们来操作一下就知道了啊好,那么我们现在是要这个放下了,对吧,那么大家可以想到我们一开始是不是要去找这个,呃,比方说我们就找这个是。Alice丝对吧,我们找内部是Alice丝的人,然后我们后边假如说我们直接这么筛的话,那肯定筛出来就是完整的爱丽丝这条记录,对吧?后面我们可以给投影,投影操作符,投影操作符,比如说我们可以这样给,我们想要拿出哪一个哪一个字符,我们就把它写在这里,然后注意后边给一个一。
17:14
大家可能知道这就相当于处对吧,你就相当于我是要把这个投引出来的,所以假如说我后面还要age的话,我是不是也给一个处啊,好,那么我们现在看一下它什么样子,诶,大家会看到city没有投射出来,Name age都有,但是前面这个杠ID也有啊,所以大家注意啊,它的默认是什么呢?投影操作服操作的时候啊,这个概念很少啊,投影操作服操作的时候。杠ID,这个ID默认就会投影出来,除非我们显示的指明你不要给我投影ID。那另外的部分呢,就是默认它都不投影,你如果不写的话就不投影,如果要写就必须显示的指明它是一,就会投影出来,那这个杠ID到底怎么样就可以不投影出来呢?那大家就看到这就是我们的例子,就是我们显示的写杠ID0,一是投影,零就是不投影对吧?所以这样写出来,大家看到拿到的就是name和H对吧。
18:22
所以是这样的一个投影操作符,好,那么呃,当然了,就是刚才我们是只筛了一条,那大家想这个这个是不是可以筛出多条呢?那我们这里的city现在都是上海,我们把这个上海拿出来试试啊,上海name a ID对吧?ID大家看到是不是就是把我们三条全职name和A拿出来了啊,就是这样的一个过程,呃,那我们前面还说了,就是你如果筛选的话,如果是name和city,那可能是我就指定某一个值了,对吧?那有可能我要指定age呢,Age我可能不是筛选某个年龄,我可能是某个年龄段,对吧?那这个时候我们怎么样去做呢?大家可能想到我是不是应该是A,就是大于什么或者小于什么。
19:11
啊,但是这里边确实我们应该是这样去写,对吧,大于小于,但是这里大家发现所有的都是类Jason的一个数据结构,我们不能直接写大于小于。那怎么去表示呢?Mango里边就提供了其他的一些操作符,比如说我们可以Dollar LT。大家又会说这是large than对吧?这是不是就是大于啊,我们可以比方说啊,大于25,我们给个这个值,所以大家可以看到,诶,呃,不是不是蜡烛啊,这个这个是这个是less对吧?LT是less,呃,大是GT对吧?Greater than对,所以这个这个大家搞清楚啊,所以大家会看看到就是我们如果要是加入这个参数的话,筛出来就是比25小的。
20:04
啊,年龄比25小的一个人对吧,那当然当然大家如果要是这里给这个24的话,诶不对,给26的话,就应该有两个,有两个人能选出来了,对不对,写错了。我哪里加了一个不正确的东西吗?少个括号是吗?哪哪里少了26后面少了个括号是吧。好,所以大家看到我们这样就可以把相应的这一个条件都选择出来,那这个对应的操作服,那大家可以知道有LT有GT啊,那这个其实就像shell里边的那个做法一样,对吧?大家如果熟悉这个Linux shell的话,它里边其实就是这样的一些操作服啊,LTGT,那当然就还有这个,呃,EQ对吧,等于对,还有这个ne啊什么的,就是不等于或者怎么样,那大家如果感兴趣可以查这个官方文档,都是一些对应的一些操作服,对吧?条件操作服我们这里就不详细展开讲了,那接下来再给大家多说一个,说什么呢?就是查询条件里边的and和or,那么大家肯定就会想到我这个查询的过程当中,你只说了一个条件对吧?那我们有时候查询条件是联合查询啊。
21:32
我可能是符合这个条件,而且要符合另外一个条件,对不对啊,有可能我们在刚才就是你是居住在上海,而且要年龄小于小于25,对吧,那这种情况我们怎么样去查询呢?Mango里边的产品条件非常简单,And的条件。逗号隔开就完了,所以这个就就几乎就不用说对吧,大家直接就能想到它,就是因为这是一个大对象嘛,里边是一个Jason的对象,所以说。
22:00
各个对象,然后我们当成这个不同的键值把它隔开就可以了,然后接下来呢,又会发现就是还有一个是哦。Or的话就稍微麻烦一点,你既然逗号这种简单的处理方式给了给了and,那or怎么去处理呢?它就专门定义了一个操作服务,叫Dollar or。呃,大家看一下他怎么操作啊,他操作的时候就是我们一个对象里边,首先是操作符Dollar all。然后它的值是什么呢?值是一个数组,这个数组里边是它二的每一个条件啊,所以是这样的一个一个表达,所以大家看一下,那大家可以看到这个联合使使用一个案例,怎么样去使用呢?我们看这个DB call collection.find。Value要GT,这是大于对吧,大于2000,这是一个条件。逗号分隔后面是不是且啊。对吧,就是要value大于2000,而且,而且满足什么呢?是一个Dollar all,所以是满足,而且要满足后边两个里边的一个,对吧,那这两个是货的关系,就是category是cell food或者是name是iPhone,满足这两个里边的一个就可以,而且还要value大于2000。
23:22
啊,所以是这样的一种选择啊,大家可以看到最后还有一个点pretty,这个大家一试就知道啊,等一下我们来试一下,就是点pretty是什么呢?就是可以优化一下显示对不对,哎,我们可以直接在这里pretty一下,大家看看显示出来是什么啊,这个这个已经显示不出来了啊。我是敲错了吗?没敲错,我们这个如果加了这个投影之后,就已经显示不出来了,比方说我这里边先选这个,大家可以看到拿出来的就是这些东西对不对,那我假如pretty大家可以看到就是,呃,更。
24:07
更优美的一种显示方式,是不是,所以它叫pretty对吧?更漂亮的一种显示方式,呃,大家更熟悉的这种Jason的显示方式,好啊,那刚才我们说的是联合条件查询,那比方说我们要查这个年龄要大于,呃,这个小于26,而且我们给个什么条件吧,我们还可以这个all对吧?呃,这这里大家注意啊,我们这是应该是要给一个好Dollar all,大家注意不需要括在这个对象里面,因为我们所有的前面这里应该统一,这是这是一个条件对象对不对,全在这个里边放着的,对吧,大家不要把那个放在大括号外边,前面第一个条件是H要等于这个,那呃要大要小于26,后边我们可以直接跟。
25:01
Don。Daughter,然后它后边是一个数组,那这个数组里边我们就又是对象去隔开了,对吧?是这样的一个选择,那么这个数组里边我们可以要求,比方说name是Alice。那或者这个CT。是上海啊,当然这个上海的话,这就全选出来了,对吧,所以大家可以看一下,我们这样一选的话,还是两个都要选出来对不对,那当然如果大家想到如果这个city是北京的话,那是不是就只应该是只有爱丽丝选出来啊。对不对,是不是这样,因为我们要求年纪他俩都满足,但是我们还要求,要不你内部是Alice,要不city得是北京,那刚才的Bob这两个条件都不符合就被删掉,删掉了,对吧,所以这是联合条件查询,好这就是我们给大家讲的这一个。
26:06
查询这一部分啊,那最后一部分我们再来给大家简单的说一下这个排序,那排序是什么东西呢?那其实非常的简单啊,就是我们可以把它里边查询到的结果直接点salt。然后就做了一个排序啊,所以这个调用非常简单对吧,我们都不需要去做什么操作,那后面呢,会指定根据哪一个键去排序,给给定一个K对吧,那后面K后面要给一个值,这个值要不是一,要不是负一,它的意义就是一是升序。注意指向序对吧?好,那么我们这里边,呃,给大家还是简单的演示一下,那我们刚才已经做了这样的这个find对吧,等于上海,那么我们这里边直接去给它做一个salt,呃,那大家可以想到我们salt的时候,里边是key,然后跟上,那我们排序的这个值,一般情况我们也是要能排序的东西,对吧?那我们是不是应该用A去排序啊,比方说A等于一,它们就应该是按照A组升序去排序对不对?21 25对吧?那大家会想到如果我这里给负一的话,是不是就应该是二十五二十一这样去排啊。
27:26
对,所以就是这样的一个排序规则,非常简单啊,Salt。呃,最后一部分就是这个索引,索引也是简单说一下,芒果DB里面也有一个方式去创建索引,就还是在这个collection内,也是它下面的一个方法,叫做create index。呃,就是在这个相当于这个表里边去创建索引,对吧?呃,那创建索引的方式是什么呢?就后面跟上这个K,然后option这里给一个一或者负一,就跟查询很类似对吧?就是一是升序创建索引,负一是降序创建索引,那大家就可以看到我们这里有一个例子,Create create index title是一,Description是负一,那就是说创建一个,这相当于是一个联合索引,对不对?要把这个title按照升序去索引起来,然后详情描述按照降序去索引起来。
28:23
啊,这个就是方便我们这个查询性能优化对吧,查询速度创建索引,这个我们就不详细去展开了,大家可以去试一试啊。
我来说两句