初识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

Meils
1.6k 声望157 粉丝

前端开发实践者