设为首页 收藏本站
查看: 828|回复: 0

[经验分享] 【MongoDB】深入了解MongoDB不可不知的十点

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-11-5 09:10:11 | 显示全部楼层 |阅读模式
一、对象ID的生成每个mongoDB文档那个都要求有一个主键,它在每个集合中对所有的文档必须是唯一的,主键存放在文档_id字段中。由12个字符组成;
4c291856       238d3b   19b2     000001  
4字节时间戳   机器ID   进程ID  计数器3333
二、BSONBSONmongodb中用来标示文档的二进制格式,它既是存储格式,也是命令格式。所有文档都以bson存储在磁盘上,所有的查询和命令都用bson文档来指定。
Db.users.find({_id:ObjectId(‘4c291856238d3b19b2000001’)})
Db.users.find({_id:‘4c291856238d3b19b2000001’})
以上两种查询的结果完全不同,其中只有一个能查询到匹配_id字段,这完全取决于users集合中的文档存储的是BSON对象ID还是标示ID十六进制的BSON字符串。
三、聚合命令限制 在实用性方面,distinct group有一个很大的限制,它们返回的结果集不能超过16M16M的限制并不是这些命令本身所强加的阀值,这是所有的初始查询结果的大小。如果distinctgroup处理不了你的集合结果集,那么就只能使用map-reduce代替了,它的结果可以保存在集合中的非内联返回。
四、原子文档处理我们知道mongodb不善于处理事物,但要是用户确实需要需要进行查询和更新同时操作怎么办呢? 有一个工具你肯定不想错过,那就是mongodbfindAndModify命令。该命令允许对文档进行原子性更新,并在同一次调用中返回。
db.collections.findAndModify(
{
query:{},update:{},new:true or false
}
)
默认情况下,findandmodify 命令会返回更新前的文档,要是返回修改后的文档,就把new设置为false.
五、对数组使用$unset请注意在单个数组元素上使用$unset的结果可能与你设想的不一样。其结果只是将元素的值设置为null,而非删除整个元素。要想彻底删除某个数组元素,可以用$pull $pop操作符。
六、$addToSet$push的区别该两者的功能都是给数组添加一个值。但是两者之间有区别,$addToSet要添加的值如果不存在才进行添加操作,但是push只添加一个值;例如:
  tags = [“tools”,”garden”]
如果执行db.collection.update({},{$push:{tag:tools}}) 结果就是 [“tools”,”garden”,“tools”]
如果执行db.collection.update({},{$addToSet:{tag:tools}}) 结果不变
七、稀疏索引创建在稀疏索引中只会出现被索引键有值的文档,如果想创建稀疏索引,指定{sparse:true}就可以了。例如:
Db.product.ensureIndex({sku:1},{unique:true,sparse:true})
Sku可能存在为null的文档。

八、声明索引时要小心由于创建索引比较简单,所以很容易在无意间创建索引,如果数据集很大的话,构建会花费很长的时间。并且没办法中种植。同时创建索引时候最好先排序这样更加高效。
九、用Explaintrue)详细查询执行计划用户db.collection.find(condition).explain(true)
十、乐观锁乐观锁就是并发控制,这项技术保证在无需锁定记录的情况下对器进行彻底更新。要理解它,最简单的办法就是想像一个wifi,有多个用户可以同时编辑一个页面。但你肯定不希望用户编辑并更新一个过期的页面,这是就可以使用乐观锁协议,当用户试图保存他们更改的时候,会在更新操作中增加一个时间戳,如果该值比这个页面最近保存的版本旧,就不让用户更新。
这个在mongodb 执行$inc中用到


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-27080-1-1.html 上篇帖子: mongodb中使用mapreduce进行分组统计 下篇帖子: 【MongoDB】windows下搭建Mongo主(Master)/从(slave)数据库同步
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表