# 八.更新文档

前言

  • 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

# 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
  • multi

如果有多条 name 是 小明 2 的数据只更新一条,如果想全部更新需要指定{multi:true}的参数

db.students.update({name:'小明2'},{$set:{age:10},{multi:true}});
# WriteResult({"nMatched":2},"nUpserted":0,"nModified":2);
1
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
  • $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
  • $pop

从数组中移除指定的索引中对应的元素

db.student.update({name:'小明1'},{$pop:{hobbys:1}});
1
  • 修改指定索引元素
db.c3.update({name:'小明1'},{$set:{"hobbys.0":"smoking2"}});
1