$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"}})