提示:下面代码中所操作的集合都已经插入到数据库中了,只是对MongoDB十种修改器的基本介绍
# 首先贴出一个每次修改完以后都会使用的语句:查询
db.student.find(
{"name" : "对应的姓名"}
).skip(0).limit(5).sort(
{"$natural" : -1}
).pretty()
# 修改器
# 对于MongoDB数据库而言,数据的修改会牵扯到内容的变更,结构的变更(可能含有数组),所以在MongoDB设计的时候,
# 就提出了一系列的修改器的应用,像之前使用的"$set" 就是一种修改器
# 一共提供了十种修改器
1. $inc : 主要针对于一个数字字段,增加或减少某个数字字段的数据内容
|- 语法 {"$inc" : {"成员" : "内容"[, "成员" : "内容"]}}
# 范例:将年龄为30岁的学生,成绩一律减少30分,年龄减1
db.student.update(
{"age" : 30},
{"$inc" : {"score" : -30, "age" : -1}}, # 年龄减1, 分数减30
false,
true
)
2. $set : 进行内容的重新设置
|- 语法 {"set" : {"成员" : "新内容"[, "成员" : "新内容"]}}
# 范例:将年龄为29岁的人的成绩修改为80分,年龄设置为30
db.student.update(
{"age" : 29},
{"$set" : {"score" : 80, "age" : 30}}, # 年龄修改为30, 成绩修改为80
false,
true
)
3. #unset : 删除某个成员的内容
|- 语法 {"$unset" : {"成员" : 1[,"成员" : 1]}}
范例:删除张三的年龄和分数字段
db.student.update(
{"name" : "张三"},
{"$unset" : {"age" : 1, "score" : 1}}, # 执行之后这两个字段就被删除了
true,
false
)
4. $push : 相当于将内容追加到指定的成员之中(基本上是数组);
|- 语法 {"$push" : {"成员" : "内容"}}
范例:给张三添加课程信息,添加数组形式(注意观察这个例子的结果)
db.student.update(
{"name" : "张三"},
{"$push" : {"course" : ["语文", "数学"]}}, # 执行之后追加了一个课程字段,会重新创建一个数组,把这个数组放在重新创建的数组中
true,
false
)
# 范例:给李四添加课程信息,非数组
db.student.update(
{"name" : "李四"},
{"$push" : {"course" : "数学"}}, # 创建一个数组,把数据放在数组中
true,
false
)
# 范例:向 王大拿 - E 中添加美术课程
db.student.update(
{"name" : "王大拿 - E"},
{"$push" : {"course" : "美术"}}, # 由于有course 字段,所以在尾部追加内容
true,
false
)
# 通过观察上面的几组数据可以发现:$push 就是进行数组的添加操作使用的,如果没有数组则进行一个新的数组的创建,
# 如果有数组,则在数组里面追加
5. $pushAll : 与 "$push" 类似,可以一次追加多个内容到数组中
|- 语法 {"$pushAll" : {"成员" : ["内容1", "内容2"]}}
范例:向王五的信息中添加多个课程内容
db.student.update(
{"name" : "王五"},
{"$pushAll" : {"course" : ["美术", "音乐", "素描"]}},
true,
false
)
6. $addToSet : 向数组里面增加新的内容,只有当这个内容不存在的时候才会增加
|- 语法 {"$addToSet" : {"成员" : "内容"}}
范例:向王五的课程信息中添加一个美术课,美术课此时已经存在
db.student.update(
{"name" : "王五"},
{"$addToSet" : {"course" : "美术"}}, # 向该数组中添加一个已经存在的字段,没有变化
true,
false
)
范例:向王五的课程信息中添加一个不存在的课程字段
db.student.update(
{"name" : "王五"},
{"$addToSet" : {"course" : "街舞"}}, # 再次查找的时候多了一个街舞课程
true,
false
)
# 通过观察上面的两种情况可以发现:此时会判断要增加的内容在数组里面是否已经存在了,如果不存在在向数组中追加内容
# 如果存在了,则不做任何的修改操作
7. $pop : 删除数组内的数据
|- 语法 {"$pop" : {"成员" : 内容}} # 内容如果设置为-1,删除第一个;设置为1的话,删除最后一个
范例:删除王五的第一个课程
db.student.update(
{"name" : "王五"},
{"$pop" : {"course" : -1}},
true,
false
)
8. $pull : 从数组内删除指定内容的数据
|- 语法 {"$pull" : {"成语" : "数据"}} # 数据是用来进行数据比对的,如果是此数据,则删除;如果不是,不进行任何操作
范例:删除王五的音乐课程(此时王五并没有选择音乐这门课),执行完以后可以发现并没有进行修改
db.student.update(
{"name" : "王五"},
{"$pull" : {"course" : "音乐"}},
true,
false
)
# 删除王五的街舞课程(观察结果可以发现成功删除)
db.student.update(
{"name" : "王五"},
{"$pull" : {"course" : "街舞"}},
true,
false
)
9. $pullAll : 一次性删除多个内容
|- 语法 {"成员" : ["数据1", "数据2", ...]}
范例:删除 王大拿 - A 中的三门课程
db.student.update(
{"name" : "王大拿 - A"},
{"$pullAll" : {"course" : ["语文", "政治", "历史"]}},
true,
false
)
10. $rename : 为成员名称重命名
|- 语法 {"$rename" : {"旧的成员名称" : "新的成员名称"}}
范例:将张三的 "name" 修改为 "姓名"
db.student.update(
{"name" : "张三"},
{"$rename" : {"name" : "姓名"}},
true,
false
)
# 总结:在MongoDB数据库中,提供的修改器的支持很到位。