初识update修改器
$set修改器
db.workmate.update({"name": "MinJie"}, {$set: {sex: 2, age: 21} });
// 修改嵌套内容
db.workmate.update({"name": "MinJie"}, {$set: {skill.skillThree: "word"} })
$unset用于删除
db.workmate.update({"name":"MinJie"}, {$unset: {"age": ''}})
// 这样就成功的把age这个字段删除了
如果想要再次添加可以使用$set进行添加,只是添加的内容到了整个文档的最后面了。
$inc对数字进行计算
// 它是对value值的修改,但是修改的必须是数字,字符串是不起效果的。
db.workmate.update({"name": "MenJie"}, {$inc: {age: -2}})
// 年龄减去2
multi选项
// 为每个文档都添加一个属性
db.workmate.update({}, {$set: {interset: []
}})
// 如果你这样写了,只会在第一个文档上添加该条信息
// 因此这就用到了multi选项了
db.workmate.update({}, {$set: {interset: []
}, { multi: true} })
// 这时候每个数据都发生了改变,multi是有ture和false两个值,true代表全部修改,false代表只修改一个(默认值)
upsert选项
// upsert是在找不到值的情况下直接插入该条数据
db.workmate.update({name:'xiaoWang'},{$set:{age:20}},{upsert:true})
// upsert也有两个值:true代表没有就添加,false代表没有不添加(默认值)。
update数组修改器
$push数组追加器
db.workmate.update({"name": "xiaowang"}, {$push: {interest: "draw"}} )
// 要给小王加上一个爱好(interset)为画画(draw):
$ne查找是否存在
// 检查一个值是否存在,如果不存在再执行操作,存在就不执行
db.workmate.update({name:'xiaoWang',"interest":{$ne:'playGame'}},{$push:{interest:'Game'}})
// 如果小王的兴趣里面没有playgame, 我们就push一个game,如果有则不修改
// 总结:没有则修改,有则不修改。
addToSet升级版的$ne
// 我们现在要查看小王(xiaoWang)兴趣(interest)中有没有阅读(readBook)这项,没有则加入读书(readBook)的兴趣.
db.workmate.update({name:"xiaoWang"},{$addToSet:{interest:"readBook"}})
// 查找是否存在,不存在就push上去)
$each批量追加
var newInterset=["Sing","Dance","Code"];
// 如果我们想给小王的兴趣中批量插入数据
db.workmate.update({"name": "xiaowang"}, {interest: {$each: {newInterest}}}) // 正常时这么写的,但是如果有重复的呢,那我们就得再借助于$addset了
db.workmate.update({"name": "xiaowang"}, {$addToSet: {interest: {$each: newInterest } } } )
$pop 删除数组值
$pop只删除一次,并不是删除所有数组中的值。而且它有两个选项,一个是1和-1。
1:从数组末端进行删除
-1:从数组开端进行删除
// 删除
db.workmate.update({name:'xiaoWang'},{$pop:{interest:1}})
// 从末端删除最后一个元素
// 删除
db.workmate.update({name:'xiaoWang'},{$pop:{interest:-1}})
// 从开始删除第一个元素
数组定位修改
//
db.workmate.update({"name":"xiaowang"}, {$set: {"interest.2" : "code"}})
// 将小王的兴趣的第二项修改为code