update数组修改器


$push追加数组/内嵌文档值

$push的功能是追加数组中的值,但我们也经常用它操作内嵌稳文档,就是{}对象型的值。先看一个追加数组值的方式,比如我们要给张三加上一个爱好(interset)为画画(draw):

db.workmate.update({name:'zhangsan'},{$push:{interest:'draw'}})

当然$push修饰符还可以为内嵌文档增加值,比如我们现在要给我们的UI,增加一项新的技能skillFour为draw,这时候我们可以操作为:

db.workmate.update({name:'jspan'},{$push:{"skill.skillFour":'draw'}})

$push修饰符在工作中是最常用的,因为我们的数据一般都会涉及数组和内嵌文档的操作。

$ne查找是否存在

它主要的作用是,检查一个值是否存在,如果不存在再执行操作,存在就不执行。
例子:如果zhangsan的爱好(interest)里没有palyGame这个值,我们就加入Game这个爱好。

db.workmate.update({name:'zhangsan',"interest":{$ne:'playGame'}},{$push:{interest:'Game'}})

总结:没有则修改,有则不修改。

$addToSet 升级版的$ne

它是$ne的升级版本(查找是否存在,不存在就push上去),操作起来更直观和方便,所以再工作中这个要比$en用的多。
例子:我们现在要查看张三(zhangsan)兴趣(interest)中有没有阅读(readBook)这项,没有则加入读书(readBook)的兴趣.

db.workmate.update({name:"zhangsan"},{$addToSet:{interest:"readBook"}})

$each 批量追加

它可以传入一个数组,一次增加多个值进去,相当于批量操作,性能同样比循环操作要好很多,这个是需要我们注意的,工作中也要先组合成数组,然后用批量的形式进行操作。
例子:我们现在要给zhangsan,一次加入三个爱好,唱歌(Sing),跳舞(Dance),编码(Code)。

var newInterset=["Sing","Dance","Code"];
db.workmate.update({name:"zhangsan"},{$addToSet:{interest:{$each:newInterset}}})

$pop 删除数组值

$pop只删除一次,并不是删除所有数组中的值。而且它有两个选项,一个是1和-1。

  • 1:从数组末端进行删除
  • -1:从数组开端进行删除

例子:现在要删除zhangsan的编码爱好(code)。

db.workmate.update({name:'zhangsan'},{$pop:{interest:1}})

数组定位修改

有时候只知道修改数组的第几位,但并不知道是什么,这时候我们可以使用interest.int 的形式。
例子,比如我们现在要修改zhangsan的第三个兴趣为编码(Code),注意这里的计数是从0开始的。

db.workmate.update({name:'zhangsan'},{$set:{"interest.2":"Code"}})

文章作者: 技术潘
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 技术潘 !
 上一篇
状态返回与安全 状态返回与安全
在操作数据库时,对数据的修改是需要有足够的安全措施的,其实在实际工作中,我们用db.collections.update的时候不多,在修改时我们都会用findAndModify,它可以给我们返回来一些必要的参数,让我们对修改多了很多控制力,控制力的加强也就是对安全的强化能力加强了。
2019-05-08
下一篇 
初识update修改器 初识update修改器
update修改器可以帮助我们快速和简单的修改数据,让我们的操作更简单方便。
2019-04-29
  目录