# 八.更新文档
前言
- update:用来更新集合中的数据
db.collection.update(
<query>, # query:查询条件,指定要更新符合哪些条件的文档
<updateObj>, # update:更新后的对象或指定一些更新的操作符 $set 直接指定更新后的值 $inc 在原基础上累加
{
upsert: <boolean>, # upsert:可选,这个参数的意思是,如果不存在符合条件的记录时是否插入 updateObj,默认是 false,不插入
multi: <boolean> # multi:可选,mongodb 默认只更新找到第一条记录,如果这个参数为 true,就更新所有符合条件的记录
}
)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# multi
- upsert
将students
集合中数据中name
是 小明 2 的值修改为 小明 22
db.students.insert({_id:1,name:'小明1'});
# WriteResult({'nInserted':1})
db.students.update({_id:2},{name:'小明2'},{upsert:true});
# WriteResult({'nInserted':0,'nUpserted':1,'nModified':0,'_id':2})
1
2
3
4
2
3
4
- multi
如果有多条 name 是 小明 2 的数据只更新一条,如果想全部更新需要指定{multi:true}
的参数
db.students.update({name:'小明2'},{$set:{age:10},{multi:true}});
# WriteResult({"nMatched":2},"nUpserted":0,"nModified":2);
1
2
2
# updateObj
- $set
直接指定更新后的值
db.c3.update({name:'小明2'},{$set:{age:10}},{multi:true});
1
- $inc
在原基础上累加
db.c3.update({name:'小明2'},{$inc:{age:1}},{multi:true});
1
- $unset
删除指定的键
db.c3.update({name:'小明2'},{$unset:{age:1}},{multi:true});
1
- $push
向数组中添加元素
var result = db.student.update({name:'张三'},{
$push:{"hobbys":"smoking"}
});
1
2
3
2
3
- $ne
$ne 类似于 MYSQL 的 not in 或者 not exists
db.student.update({name:'小明1',hobbys:{$ne:'smoking'}},{$push:{"hobbys":"smoking"}});
1
- $addToSet
向集合中添加元素
db.student.update({name:'小明1'},{$addToSet:{"hobbys":"smoking"}});
1
- $pull
向集合中删除元素
db.student.update({name:'小明1'},{$pull:{"hobbys":"smoking"}});
1
- $each
把数组中的元素逐个添加到集合中
var hobbys = ["A",'B'];
db.student.update({name:'小明1'},{$addToSet:{hobbys:{$each:hobbys}}});
1
2
2
- $pop
从数组中移除指定的索引中对应的元素
db.student.update({name:'小明1'},{$pop:{hobbys:1}});
1
- 修改指定索引元素
db.c3.update({name:'小明1'},{$set:{"hobbys.0":"smoking2"}});
1