MongoDB之数据更新(修改器)
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,对MongoDB数据库而言,数据的修改会牵扯到内容的变更,结构的变更(包含有数组)。所以在进行MongoDB设计的时候就提供有一系列修改器的应用。之前使用的"$set"就是一个修改器。1、$inc:主
千家信息网最后更新 2026年11月03日MongoDB之数据更新(修改器)对MongoDB数据库而言,数据的修改会牵扯到内容的变更,结构的变更(包含有数组)。所以在进行MongoDB设计的时候就提供有一系列修改器的应用。之前使用的"$set"就是一个修改器。
1、$inc:主要针对于一个数字字段,增加某个数字字段的数据内容:
语法:{"$inc":{"成员":"内容"}}
范例:将年龄为30岁的一个员工的薪水一律1000,年龄加1岁
> db.emp.update({"age":30},{"$inc":{"sal":-1000,"age":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":31}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "赵一",
"sex" : "男",
"age" : 31,
"sal" : 8999,
"loc" : "北京"
}
2、$set:进行内容的重新设置:
语法:{"$set":{"成员":"新内容"}}
范例:将年龄是30岁的某个人员的薪水修改为7999
> db.emp.update({"age":30},{"$set":{"sal":7999}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":30}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7999,
"loc" : "北京"
}
3、$unset:删除某个成员的内容:
语法:{"$unset":{"成员":1}}
范例:删除"孙三"的年龄和薪水信息
> db.emp.find({"name":"孙三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孙三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
> db.emp.update({"name":"孙三"},{"$unset":{"age":1,"sal":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孙三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孙三",
"sex" : "男",
"loc" : "深圳"
}
4、$push:相当于将内容追加到指定的成员之中(基本上是数组):
语法:{"$push":{"成员":value}}
范例:向"孙三"添加2门课程信息(此时孙三信息下没有course信息)
> db.emp.update({"name":"孙三"},{"$push":{"course":["语文","数学"]}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孙三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孙三",
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"语文",
"数学"
]
]
}
范例:向"李四"添加一门课程信息(此时李四信息下没有course信息)
> db.emp.update({"name":"李四"},{"$push":{"course":"语文"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"李四"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7999,
"loc" : "北京",
"course" : [
"语文"
]
}
范例:向"刘A"的课程追加一个"美术"
> db.emp.find({"name":"刘A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "刘A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"语文",
"数学",
"英语",
"音乐",
"政治"
]
}
> db.emp.update({"name":"刘A"},{"$push":{"course":"美术"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"刘A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "刘A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"语文",
"数学",
"英语",
"音乐",
"政治",
"美术"
]
}
就是进行数组数据的添加操作使用的。如果没有数组则进行新的数组的创建,如果有则进行内容的增加。
5、$pushAll:与"$push"是类似的,可以一次追加多个内容到数组里面:
语法:{"$pushAll":{"成员":数组内容}}
范例:向"周五"里面添加多个课程内容
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
> db.emp.update({"name":"周五"},{"$pushAll":{"course":["美术","音乐"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"美术",
"音乐"
]
}
6、$addToSet:向数组里面增加一个新的内容,只有这个内容不存在的时候才会增加
语法:{"$addToSet":{成员:内容}}
范例:向"周五"的信息增加新的内容
> db.emp.update({"name":"周五"},{"$addToSet":{"course":"舞蹈"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"美术",
"音乐",
"舞蹈"
]
}
此时会判断要增加的内容在数组里面是否存在,如果不存在则向数组之中追加内容,如果存在则不做任何修改操作。
7、$pop:删除数组内的数据
语法:{"$pop":{成员:内容}},内容如果设置为-1表示删除第一个,如果内容设置为1表示删除最后一个
范例:删除周五的第一个课程
> db.emp.update({"name":"周五"},{"$pop":{"course":-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"音乐",
"舞蹈"
]
}
范例:删除周五的最后一个课程
> db.emp.update({"name":"周五"},{"$pop":{"course":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"音乐"
]
}
8、$pull:从数组内删除一个指定内容的数据
语法:{"$pull":{成员:数据}},进行数据比对的,如果是此数据是删除
范例:删除王五的音乐课程信息
> db.emp.update({"name":"周五"},{"$pull":{"course":"音乐"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [ ]
}
9、$pullAll:一次性删除多个内容
语法:{"$pullAll":{成员:[数据,数据,...]}}
范例:删除"刘A"中的三门课程
> db.emp.find({"name":"刘A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "刘A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"语文",
"数学",
"英语",
"音乐",
"政治",
"美术"
]
}
> db.emp.update({"name":"刘A"},{"$pullAll":{"course":["语文","数学","英语"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"刘A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "刘A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"音乐",
"政治",
"美术"
]
}
10、$rename:为成员名称重命名
语法:{"$rename":{旧的成员名称:新的成员名称}}
范例:将"孙三"的name成员名称修改为"姓名"
> db.emp.find({"name":"孙三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孙三",
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"语文",
"数学"
]
]
}
> db.emp.update({"name":"孙三"},{"$rename":{"name":"姓名"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"姓名":"孙三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"语文",
"数学"
]
],
"姓名" : "孙三"
}
在整个MongoDB数据库里面,提供的修改器的支持很全面。
1、$inc:主要针对于一个数字字段,增加某个数字字段的数据内容:
语法:{"$inc":{"成员":"内容"}}
范例:将年龄为30岁的一个员工的薪水一律1000,年龄加1岁
> db.emp.update({"age":30},{"$inc":{"sal":-1000,"age":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":31}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be26"),
"name" : "赵一",
"sex" : "男",
"age" : 31,
"sal" : 8999,
"loc" : "北京"
}
2、$set:进行内容的重新设置:
语法:{"$set":{"成员":"新内容"}}
范例:将年龄是30岁的某个人员的薪水修改为7999
> db.emp.update({"age":30},{"$set":{"sal":7999}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"age":30}).pretty();
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7999,
"loc" : "北京"
}
3、$unset:删除某个成员的内容:
语法:{"$unset":{"成员":1}}
范例:删除"孙三"的年龄和薪水信息
> db.emp.find({"name":"孙三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孙三",
"sex" : "男",
"age" : 40,
"sal" : 2000,
"loc" : "深圳"
}
> db.emp.update({"name":"孙三"},{"$unset":{"age":1,"sal":1}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孙三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孙三",
"sex" : "男",
"loc" : "深圳"
}
4、$push:相当于将内容追加到指定的成员之中(基本上是数组):
语法:{"$push":{"成员":value}}
范例:向"孙三"添加2门课程信息(此时孙三信息下没有course信息)
> db.emp.update({"name":"孙三"},{"$push":{"course":["语文","数学"]}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"孙三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孙三",
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"语文",
"数学"
]
]
}
范例:向"李四"添加一门课程信息(此时李四信息下没有course信息)
> db.emp.update({"name":"李四"},{"$push":{"course":"语文"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"李四"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be29"),
"name" : "李四",
"sex" : "女",
"age" : 30,
"sal" : 7999,
"loc" : "北京",
"course" : [
"语文"
]
}
范例:向"刘A"的课程追加一个"美术"
> db.emp.find({"name":"刘A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "刘A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"语文",
"数学",
"英语",
"音乐",
"政治"
]
}
> db.emp.update({"name":"刘A"},{"$push":{"course":"美术"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"刘A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "刘A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"语文",
"数学",
"英语",
"音乐",
"政治",
"美术"
]
}
就是进行数组数据的添加操作使用的。如果没有数组则进行新的数组的创建,如果有则进行内容的增加。
5、$pushAll:与"$push"是类似的,可以一次追加多个内容到数组里面:
语法:{"$pushAll":{"成员":数组内容}}
范例:向"周五"里面添加多个课程内容
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京"
}
> db.emp.update({"name":"周五"},{"$pushAll":{"course":["美术","音乐"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"美术",
"音乐"
]
}
6、$addToSet:向数组里面增加一个新的内容,只有这个内容不存在的时候才会增加
语法:{"$addToSet":{成员:内容}}
范例:向"周五"的信息增加新的内容
> db.emp.update({"name":"周五"},{"$addToSet":{"course":"舞蹈"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"美术",
"音乐",
"舞蹈"
]
}
此时会判断要增加的内容在数组里面是否存在,如果不存在则向数组之中追加内容,如果存在则不做任何修改操作。
7、$pop:删除数组内的数据
语法:{"$pop":{成员:内容}},内容如果设置为-1表示删除第一个,如果内容设置为1表示删除最后一个
范例:删除周五的第一个课程
> db.emp.update({"name":"周五"},{"$pop":{"course":-1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"音乐",
"舞蹈"
]
}
范例:删除周五的最后一个课程
> db.emp.update({"name":"周五"},{"$pop":{"course":1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [
"音乐"
]
}
8、$pull:从数组内删除一个指定内容的数据
语法:{"$pull":{成员:数据}},进行数据比对的,如果是此数据是删除
范例:删除王五的音乐课程信息
> db.emp.update({"name":"周五"},{"$pull":{"course":"音乐"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"周五"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be2a"),
"name" : "周五",
"sex" : "女",
"age" : 30,
"sal" : 9999,
"loc" : "北京",
"course" : [ ]
}
9、$pullAll:一次性删除多个内容
语法:{"$pullAll":{成员:[数据,数据,...]}}
范例:删除"刘A"中的三门课程
> db.emp.find({"name":"刘A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "刘A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"语文",
"数学",
"英语",
"音乐",
"政治",
"美术"
]
}
> db.emp.update({"name":"刘A"},{"$pullAll":{"course":["语文","数学","英语"]}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"name":"刘A"}).pretty()
{
"_id" : ObjectId("599129a00184ff511bf02b87"),
"name" : "刘A",
"sex" : "男",
"age" : 35,
"sal" : 8000,
"loc" : "北京",
"course" : [
"音乐",
"政治",
"美术"
]
}
10、$rename:为成员名称重命名
语法:{"$rename":{旧的成员名称:新的成员名称}}
范例:将"孙三"的name成员名称修改为"姓名"
> db.emp.find({"name":"孙三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"name" : "孙三",
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"语文",
"数学"
]
]
}
> db.emp.update({"name":"孙三"},{"$rename":{"name":"姓名"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.emp.find({"姓名":"孙三"}).pretty()
{
"_id" : ObjectId("599108423268c8e84253be28"),
"sex" : "男",
"loc" : "深圳",
"course" : [
[
"语文",
"数学"
]
],
"姓名" : "孙三"
}
在整个MongoDB数据库里面,提供的修改器的支持很全面。
内容
成员
范例
北京
数据
数组
音乐
语文
语法
信息
数学
美术
课程
李四
深圳
名称
姓名
年龄
政治
英语
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
耶加雪菲
中智农互联网科技
互联网科技公司经营范围
中关村互联网 科技集团
互联网科技的
高科技与互联网
汇久创客互联网科技
北京禾田雨橡互联网科技
互联网汽车科技小镇
互联网科技实习生岗位职责
厦门比较好的科技互联网公司
南平创想时代互联网科技有限公司
武汉健翔互联网络科技有限公司
崇明区互联网教育科技诚信经营
智腾互联网科技有限公司
互联网科技商业
阿里互联网科技企业
群盈汇互联网科技有限公司
江苏互联网智能科技产品出厂价
互联网的黑科技实验室
互联网为科技
壕鑫互联网络科技
新浪科技互联网
互联网 新科技
互联网科技寓意
互联网对科技的发展
互联网与医疗科技
互联网时代的科技公司
华人运通互联网科技公司
广州全民伙伴互联网科技有限公司