MongoDB(课时18 修改器)
3.4.3.2 修改器(原子操作)
对MongoDB数据库而言,数据的修改会牵扯到内容的变更,结构的变更(包含数组),所以在MongoDB在设计的时候就提供有一系列的修改器的应用,那么像之前使用的“$set”就是一种修改器。
1. $inc:主要针对于一个数字字段,增加某个数字字段的数据内容;
语法:{"$inc" : {"成员" : 内容}}
范例:将所有年龄为21岁的学生成绩一律减少30,年龄加1
db.students.update({"age" : 21}, {"$inc" : {"score" : -30, "age" : 1}}) # 默认只改一条数据
db.students.update({"age" : 21}, {"$inc" : {"score" : -30, "age" : 1}}, false, true)
2. $set:进行内容的重新设置
语法:{"$set" : {"成员" : "新内容"}}
范例:将年龄是20岁的人的成绩修改为89
db.students.update({"age" : 20}, {"$set" : {"score" : 89}})
3. $unset:删除某个成员的内容
语法:{"$unset" : {"成员" : 1}}
范例:删除“张三”的年龄与成绩信息
db.students.update({"name" : "张三"}, {"$unset" : {"age" : 1, "score" : 1}})
执行之后指定的成员内容就消失了,相当于修改了表结构,而这次换成了集合结构。
4. $push:相当于将内容追加到指定的成员之中(输出结果为数组形式)
语法:{"$push" : {成员 : value}}
范例:向“李四”添加“美术”课程
db.students.update({"name" : "李四"}, {"$push" : {"course" : "美术"}})
范例:向“张三”添加课程信息(以数组形式添加)
db.students.update({"name" : "张三"}, {"$push" : {"course" : ["语文", "数学"]}})
$push就是进行数组数据的添加操作使用的,如果没数组则进行一个新数组的创建,如果有则进行内容的追加。
5. $pushAll:一次追加多个内容到数组里面
语法:{"$pushAll" : {成员 : 数组内容}}
范例:向“王五”的信息里面添加多个课程内容
db.students.update({"name" : "王五"}, {"$pushAll" : {"course" : ["美术", "音乐", "素描"]}})
6. $addToSet:向数组里增加一个新内容,只有这个内容不存在的时候才会增加
语法:{"$addToSet" : {成员 : 内容}}
范例:向“王五”中增加“跳舞”
db.students.update({"name" : "王五"}, {"$addToSet" : {"course" : "美术"}})
因为美术不是新内容,所以没变化。
db.students.update({"name" : "王五"}, {"$addToSet" : {"course" : "跳舞"}})
db.students.update({"name" : "王五"}, {"$addToSet" : {"course" : ["美术", "音乐", "素描", "跳舞"]}})
7. $pop:删除数组内第一个或最后一个数据
语法:{"$pop" : {成员 : 内容}} # 内容设置为-1表示删除第一个,设置为1表示删除最后一个
范例:删除王五的第一个课程
db.students.update({"name" : "王五"}, {"$pop" : {"course" : -1}})
范例:删除王五的最后一个课程
db.students.update({"name" : "王五"}, {"$pop" : {"course" : 1}})
8. $pull:从数组内删除一个指定内容的数据
语法:{"$pull" : {成员 : 数据}} # 语法中的数据是用来比对的,是此数据则删除,不是则没变化
范例:删除王五的"跳舞"课程
db.students.update({"name" : "王五"}, {"$pull" : {"course" : "跳舞"}})
注意:pull只能一次性删除一个课程,一次性删除多个课程必须用$pullAll。
9. $pullAll:一次性删除多个内容
语法:{"$pullAll" : {成员 : [数据, 数据, ...]}}
范例:删除"谷大神 - A"中的三门课程
db.students.update({"name" : "谷大神 - A"}, {"$pullAll" : {"course" : ["语文", "英语", "政治"]}})
10. $rename:为成员名称重命名
语法:{"$rename" : {旧的成员名称 : 新的成员名称}}
范例:将“张三”name成员名称修改为“姓名”
db.students.update({"name" : "张三"}, {"$rename" : {"name" : "姓名"}})
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)