zoukankan      html  css  js  c++  java
  • mongodb设置 十个要点

    mongodb设置 十个要点

     

    一、对象ID的生成

    每一个mongoDB文档那个都要求有一个主键。它在每一个集合中对全部的文档必须是唯一的。主键存放在文档_id字段中。由12个字符组成;

    4c291856       238d3b   19b2     000001  

    4字节时间戳   机器ID   进程ID  计数器3333

    二、BSON

    BSON是mongodb中用来标示文档的二进制格式,它既是存储格式,也是命令格式。全部文档都以bson存储在磁盘上,全部的查询和命令都用bson文档来指定。

    Db.users.find({_id:ObjectId(‘4c291856238d3b19b2000001’)})

    Db.users.find({_id:‘4c291856238d3b19b2000001’})

    以上两种查询的结果全然不同。当中仅仅有一个能查询到匹配_id字段,这全然取决于users集合中的文档存储的是BSON对象ID还是标示ID十六进制的BSON字符串。

    三、聚合命令限制

     在有用性方面,distinct 和group有一个非常大的限制。它们返回的结果集不能超过16M。16M的限制并非这些命令本身所强加的阀值,这是全部的初始查询结果的大小。

    假设distinct和group处理不了你的集合结果集,那么就仅仅能使用map-reduce取代了。它的结果能够保存在集合中的非内联返回。

    四、原子文档处理

    我们知道mongodb不善于处理事物,但要是用户确实须要须要进行查询和更新同一时候操作怎么办呢? 有一个工具你肯定不想错过,那就是mongodb的findAndModify命令。

    该命令同意对文档进行原子性更新,并在同一次调用中返回。

    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的文档。

    八、声明索引时要小心

    因为创建索引比較简单,所以非常easy在无意间创建索引,假设数据集非常大的话。构建会花费非常长的时间。而且没办法中种植。

    同一时候创建索引时候最好先排序这样更加高效。 

    九、用Explain(true)具体查询运行计划

    用户db.collection.find(condition).explain(true)

    十、乐观锁

    乐观锁就是并发控制,这项技术保证在无需锁定记录的情况下对器进行彻底更新。要理解它,最简单的办法就是想像一个wifi,有多个用户能够同一时候编辑一个页面。但你肯定不希望用户编辑并更新一个过期的页面,这是就能够使用乐观锁协议。当用户试图保存他们更改的时候,会在更新操作中添加一个时间戳。假设该值比这个页面近期保存的版本号旧,就不让用户更新。

    这个在mongodb 运行$inc中用到

  • 相关阅读:
    2015年值得关注的8款跨平台开发工具(界面类)
    2015年最值得关注的8款用户界面新品
    2015年最受欢迎的8个用户界面组件
    DevExpress v15.2.4帮助文档下载(全)
    DevExpress .NET界面开发示例大全
    DevExpress免费线上公开课17日开课
    DevExpress 2015.2发布 看看有哪些更新
    图文详细解说DevExpress 2015新版亮点【附文档下载】
    myeclipse 2015 CI 16发布【附下载】
    swift 第三天 控制流
  • 原文地址:https://www.cnblogs.com/timssd/p/11167806.html
Copyright © 2011-2022 走看看