六、神奇MongoDB修改器

注:命令行中...代表可以续写的意思,不是重新写
1、简介
通常文档只有一部分需要更新,可以使用原子性的修改器,对某个字段进行更新。
比如,我要实时统计访问页面的总量,就可以通过原子性的修改器来完成。提前透漏这个修改器是“$inc”
注意:使用修改器时,"_id“值不能改变
2、"$set"修改器
”$set“用来指定一个字段的值,如果有这个字段就替换,如果没有就新增
例如:
最简单的应用:

还可以更换数据类型

删除某个字段$unset

遗留问题:unset后面写字段值得时候为什么写1?不过写对应他的值也是可以删除的
解决遗留问题:1代表全部
修改内嵌文档

3、$inc()用来增加已有键的值,如果该键不存在就新建一个(简单说这个东西就是个+),主要应用于整型,长整型,双浮点型的值

4、添加元素$push()
$push会向已有数组末尾加入一个元素


再加一个

5、$each用于操作比较复杂的数组操作,如果数组里面的元素只有一个,那就是相当于$push

6、$slice设定数组长度,值只能是负数,-10代表数组只包含最后加入的10个元素

7、$sort -1为倒叙,1位正序

8、$ne可以添加不重复的数据,如果存在则不添加如果不存在,则添加

9、$addToSet这种支持批量验证插入和$each搭配使用

10、$pop可以从数组的任何一段删除数据{"$pop":{"key":"-1"}}从头开始删,{"$pop":{"key":"1"}}从尾部开始删

11、$pull根据特定条件删除数据中的某一个元素

12、$inc在数组中的使用

13、$定位符,它只能定位一次,所以如果定位到多个地方,就只修改第一个
遗留问题:未实现成功
这个应该是有错误

14、$setOnInsert
创建文件的同时创建字段,并在之后的更新中这个字段的值都不会再改变

总结:
修改器在不修改文档大小时候的操作速度会很快,但是一旦涉及文档大小更改就会影响性能,比如inc就不回影响文档大小
没移动一次文档,就会增加集合的填充因子(增加空白空间),这个增加很多填充因子肯定是不好的。
如果操作在插入和删除时会进行大量的移动和打乱数据,就是用usePowerOf2Sizes提高磁盘的复用率
db.runCommand({"collMod":CollectionName,"usePowerOf2Sizes":true})
这种方法只适用于经常需要打乱数据的集合上使用,在只进行插入或原地更新的集合上使用会降低效率。这个只会影响设置之后新分配的数据
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值