开发者学堂课程【快速掌握 MongoDB 数据库:修改器】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/400/detail/5193
修改器
对 MongoDB 数据库而言,数据的修改会牵扯到内容的变更、结构的变更(包含有数组),所以在进行 MongoDB 设计的时候就提供有一系列的修改器的应用,之前使用的“$set”就是一个修改器。
一共提供了十种修改器,接下来学习各个修改器的含义:
1、$inc:
主要针对于一个数字字段,增加某个数字字段的数据内容;
语法:{ "$inc" :{"成员":内容}}
范例:将所有年龄为19岁的学生成绩一律减少30分,年龄加一岁。
db.students.update( { "age" : 19} , {"$inc" : { "score" : -30 , " age" : 1}}) ;
结果:
" id" :objectId("5594ab1eeecd74894d19fff4""),
"name" :
“王五”,
"sex" :
女",
"age" :
20,
score" :
70,
"address" :
“西城区"
"_id": 0bjectId("5594ab1eeecd74894d19fff5""),
"name":
"赵六”,
"sex"" :
“男",
age” :
20,
"score"" :
100,
"address" :
东城区"
可以看到成绩是70的,年龄都改变了,
2、$set:
进行内容的重新设置;·
语法:{"$set": “成员":"新内容"}};
范例:将年龄是20岁的人的成绩修改为89.
db.students.update( { "age" : 20}, {"$set" : {"score" : 89}}) ;
执行成功,只要执行出现了匹配个数和修改个数就表明成功了。
既然能设置内容,那么也能删除内容:
3、$unset:
删除某个成员的内容;
语法:"$unset" : “成员":1}} //1 表示删除的意思
范例:删除“张三”的年龄与成绩信息。
db.students.update( {"name"
: "张三"},{"Sunset" : { "age" : 1, "score”: 1}});
结果:
id": objectId( "5594ab1eeecd74894d19fff2""),
name""
: 张三",
"sex”
:男,
"address"
“海淀区"
id" : ObjectId( 5594ab1eeecd74894d19fff3""),
"name"":
“李四”,
""sex"
:女”,
age""
: 20,
score"
: 59,
address"
:“朝阳区"
执行后指定的成员内容就消失了。
4、Spush:
相当于将内容追加到指定的成员之中(基本上是数组);
语法:$ i{"$push" :{成员: value} }. //value 基本上只能是数组,如果数组不存在再去改变。
范例:向“张三”添加课程信息(此时张三信息下没有course信息)。
db.students.update( {"name"
: "张三"},{"$push" : {"course"
:"语文"“数学”}});
执行:
_id:objectId("5594ab1eeecd74894d19fff2"") ,
"name"
:张三",
sex:
"男"
address":
“海淀区",
course”: [
[
“语文",
“数学”
]
]
结果成了数组了,也就是说加的内容本身就是追加一个新的字段,新的字段是一个数组,这里有两个中括号,事实上现在的过程确实有数组,但是这个数组里面只能增加一个数据,比如:
范例:向“李四”添加课程信息(此时张三信息下没有course信息)。
db.students.update( {"name"
: "李四"},{"$push" : {"course"
:"语文"}});
写完后在上方查询的地方跟上李四。
执行:
_id”: 0bjectId("5594ab1eeecd74894d19fff3")
"name"
: 李四”,
"sex""
:“女",
age""
: 20,
score
:59.
address
":朝[阳区",
"course""
:【
"语文”
]
李四现在没有数据,那么就找一个有数据的:
范例:向“谷大神–E”里面的课程追加一个“美术”,
db.students.update( {"name":
"谷大神 -E"}, {"$push" : { "course":"
美术"});
$push 就是进行数组数据的添加操作使用的,如果没有数组则进行一个新的数组的创建,如果有则进行内容的追加。
结果:
"_id": objectId("5594b0a3eecd74894d19fffd"") ,
"name""
:谷大神-E",
"sex”
:“男,
"age"
: 20,
score”
: r0:.山
address"
:海淀区”,
"course": [
“语文",
"政治”,
“美术”
]
5、$pushAll:
与“$push”是类似的,可以一次追加多个内容到数组里面;
语法:$ {"$pushAl1":{成员:数组内容}}
范例:向“王五”的信息里面添加多个课程内容
db.students.update( { "name"
: "王五"}, {"
$
pushALL" : { "course"
:["美术","音乐",'素描"}}); //注意大小写
结果:
"_id": 0bjectId("5594ab1eeecd74894d19fff4"") ,
name"
:“王五”,
"sex""
:“女”,
age""
: 20,
score"
: 70,
address""
:西城区,
course"": [
"美术
“音乐",
“素描"
]
6、$addToSet:
向数组里面增加一个新的内容,只有这个内容不存在的时候才会增加
语法:"$addToSet":{成员:内容}}}
范例:向王五的信息增加新的内容
db.students.update( { "name"
: "王五"}, {"SaddToSet" : { "course":
"舞蹈"});
此时会判断要增加的内容在数组里面是否已经存在了,如果不存在则向数组之中追加内容,如果存在,则不做任何的修改操作。
结果:
"_id": objectId("5594ab1eeecd74894d19fff4""),
name":
“王五”,
"sex”
:"女”,
"age"
: 20,
score”
: 70,,
"address”
:西城区",
"course":【
“美术",
“音乐",
“素描",[
"美术“
"音乐
“素描",
”跳舞"
”跳舞"
7、$pop:
删除数组内的数据;“
·语法:{"$pop":{成员:内容}
内容如果设置为-1表示删除第一个
如果是1表示则删除最后一个。
范例:删除王五的第一个课程。
db.students.update( { "name"
: "王五"},{"Spop" : { "course" : -1}});
范例:删除王五的最后一个课程
db.students.update( { "name"
: "王五"},{"$pop" : { "course" : 1}});
结果:
_id"
: objectId( "5594ab1eeecd74894d1Sfff4"") ,
""name"
: 王五"”,
sex":
“女",
age""
: 20,
"score”
:70..
address""_:
“西城区”,
"course"":
“音乐",
“素描"";[
:美术",
“音乐",
"素描”,
“跳舞"
这个过程就相当于数组里删除。
8、$pull:
从数组内删除一个指定内容的数据
·语法:{"$pull":{成员:数据}
进行数据比对的,如果是此数据则删除:
范例:删除王五学生的音乐课程信息
db.students.update( { "name"
: "王五"},{"Spull" : { "course": "
音乐"}});
执行:
"_id" : objectId("5594ab1eeecd74894d19fff4""),
"name"
:王五”,
"sex”
:“女”,
“
age"
: 20,
“score”
:70,
"address"
:“西城区”,
"course"" :[
素描"
]
相当于做一个值的判断,如果数组太多删不完:
9、$pullAll:
一次性删除多个内容;“
语法:{"$pull":{成员:[数据,数据,...]}} //多个数据都用数组表示
范例:删除“谷大神-A”中的三门课程
db.students.update( "name"
: "谷大神 -A"} ,{"$pullAll" : {"course"
:["语文","数学","英语"]}});
结果:
"_id": objectId("5594b39ceecd74894d19fffe"),
"name":
“谷大神- A"",
"sex"
":男,
age"
: 20,
score""
: 70,...
address”
:“海淀区”,
"course"" [
“音乐",
"政治"
1o、$rename:
为成员名称电命名;
语法:{"$rename" : {旧的成员名称:新的成员名称};
范例:将“张三”name成员名称修改为“姓名”.
db.students.update( { "name"
: "张三"}, {"$rename" : { "name":
"姓名"}})
在整个 MongoDB 数据库里面,提供的修改器的支持很到位。
结果:
"_id”: 0bjectId( "5594ab1eeecd74894d19fff2""),
"sex"
":男",.
"address":
“海淀区”,
"course": [
[
"语文",
"数学“
]
],.
“姓名”:"张三“
强烈建议:MongoDB保存的时候别用内线文档,也别用数组,就保存基本数据就可以。
因为 MongoDB 设计的时候就是按照能独当一面的设计,但在使用时,它只是一个附加的数据库,供数据查询使用。