《快速掌握 MongoDB 数据库(三)》笔记-阿里云大学

4.3、数据更新操作

对于MongoDB而言,数据的更新基本上是一件很麻烦的事情,如果在实际的工作之中,真的具有此类的操作支持,那么最好的做法,比如MYSQL存了核心数据,同步到MongoDB库,那要更新就直接删了MongoDB库重新建。

在MnogoDB里面对于数据更新操作提供了两类函数:save()、update()

4.3.1、函数的基本使用

如果要修改数据最直接的使用函数就是update()函数,但是这个函数的语法要求很麻烦:

语法:db.集合.update(更新条件, 新的对象数据(更新操作符),  upsert, multi)

|- upsert:如果要更新的数据不存在,则增加一条新的内容(true为增加,false为不增加)

|- multi:表示是否只更新满足条件的第一行记录,如果设置为false,只更新第一条,如果是true,全更新

范例:更新存在的数据,将年龄为19岁的人的成绩都更新为100分(此时会返回多条数据)

选择只更新第一条数据

db.student.update({"age":19},{"$set":{"score":100}},false,false);

所有数据都更新

db.student.update({"age":19},{"$set":{"score":100}},false,true);

范例:更新不存在的数据

db.student.update({"age":30},{"$set":{"name":"不存在"}},true,false);

由于没有年龄30岁的学生信息,所以此时相当于进行了数据的创建。

那么除了update()函数之外,还提供有一个save()函数,这个函数的功能与更新不存在的内容相似。

范例:使用save()操作

db.student.save({"_id" : ObjectId("60445174881f6f563156d857"),"age":50});

由于此时对应的id数据存在了,所以就变为了更新操作。但是如果要保存的数据不存在(并不能保存有“_id”的内容),就变为了增加操作。SAVE操作用的不多,简单了解下即可。

4.3.2、修改器

对MongoDB数据库而言,数据的修改会牵扯到内容的变更、结构的变更(包含有数组),所以在进行MongoDB设计的时候就提供有一系列的修改器的应用,那么像之前使用的"$set"就是一个修改器。

1、$inc:主要针对于一个数字字段,增加某个数字字段的数据内容

语法:{"$inc": {"成员" : 内容}}

范例:将所有年龄为19岁的学生成绩一律减少30分,年龄加1

db.student.update({"age":19},{"$inc":{"score":-30,"age":1}},false,true);

注意:尾部不加false,true参数则仅影响一条数据,而不是影响全部数据。

2、$set:进行内容的重新设置

语法:{"$set": {"成员" : "新内容"}}

范例:将年龄是20岁的人的成绩修改为89分

db.student.update({"age":20},{"$set":{"score":89}},false,true);

3、$unset:删除某个成员的内容

语法:{"$unset": {"成员" : 1}}

范例:删除“张三”的年龄与成绩信息(直接删除name和age字段)

db.student.update({"name":"张三"},{"$unset":{"age":1,"score":1},},false,true);

执行之后指定的成员内容就消失了。

4、$push:相当于将内容追加到指定的成员之中(基本上是数组)

语法:{"$push": {"成员" : value}}

范例:向姓名为“张三”的同学中添加课程信息(此时张三信息下没有course信息)

db.student.update({"name":"张三"},{"$push":{"course":["语文","数学"]}},false,true);

结果就会有点问题如下:

修改范例为:向姓名为“李四”的同学添加课程信息

db.student.update({"name":"李四"},{"$push":{"course":"语文"}},false,true);

结果看起来就正常了如下:

范例:向“谷大神-E”里面的课程追加一个“美术”(谷大神-E原有course信息)

db.student.update({"name":"谷大神-E"},{"$push":{"course":"美术"}},false,true);

结果如下:

就是进行数组数据的添加操作使用的,如果没有数组则进行一个新的数组的创建,如果有则进行内容的追加。

5、$pushAll:与"$push"是类似的,可以一次追加多个内容到数组里面

语法:{"$pushAll": {"成员" : 数组内容}}

范例:向“王五”的信息里面添加多个课程内容

db.student.update({"name":"王五"},{"$pushAll":{"course":["美术","音乐","素描"]}},false,true);

6、$addToSet:向数组里面增加一个新的内容,只有这个内容不存在的时候才会增加

语法:{"$addToSet": {"成员" :内容}}

范例:向“王五”的信息增加新的内容

db.student.update({"name":"王五"},{"$addToSet":{"course":"舞蹈"}},false,true);

此时会判断要增加的内容在数组里面是否已经存在了,如果不存在则向数组之中追加内容,如果存在了则不做任何的修改操作。

7、$pop:删除数组内的数据

语法:{"$pop": {"成员" :内容}},内容如果设置为-1表示删除第一个,如果是1表示删除最后一个

范例:删除王五的第一个课程

db.student.update({"name":"王五"},{"$pop":{"course":-1}},false,true);

范例:删除王五的最后一个课程

db.student.update({"name":"王五"},{"$pop":{"course":1}},false,true);

8、$pull:从数组内删除一个指定内容的数据

语法:{"$pull":{成员: 数据}},进行数据的比对,如果是此数据则删除

范例:删除“王五”的音乐课程信息

db.student.update({"name":"王五"},{"$pull":{"course":"音乐"}},false,true);

9、$pullAll:一次性删除多个内容

语法:{"$pullAll":{成员: [数据1,数据2,...}}

范例:删除"谷大神-A"中的三门课程

db.student.update({"name":"谷大神-A"},{"$pullAll":{"course":["语文","数学","英语"]}},false,true);

9、$rename:为成员名称重命名

语法:{"$rename":{旧的成员名称 : 新的成员名称}};

范例:将“张三”name成员名称修改为“姓名”

db.student.update({"name":"张三"},{"$rename":{"name":"姓名"}},false,true);

在整个MongoDB数据库里面,提供的修改器的支持很到位。

讲师的强烈建议:不要用内嵌文档、数组之类的特性,就保存基本数据就好。

4.4、删除数据

在MongoDB里面数据的删除实际上并不复杂,只需要使用“remove()”函数就可以了。

但是在这个函数是有两个可可选项:

      1、删除条件:满足条件的数据被删除

      2、是否只删除一个数据,如果设置为true或者是1表示只删除一个

范例:清空infos集合中的内容

db.infos.remove({})

范例:删除所有姓名里面带有“谷”的信息,要求全删除

db.student.remove({"name" : /谷/});

范例:删除姓名带有“高”的信息,要求只删除一个

db.student.remove({"name" : /高/},true);

删除操作里面依然需要使用限定查询的相关操作内容。

阿里云的视频课程到这里又不对了,还是继续回到https://www.mldn.cn/course/73去看了

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值