一、对象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中用到

【MongoDB】深入了解MongoDB不可不知的十点的更多相关文章

  1. mongoDB操作命令及mongoDB的helper

    此项目已开源,开源地址是: http://mongodbhelper-csharp.googlecode.com/svn/trunk/ mongodb的helper using System; usi ...

  2. mongoDB & Nodejs 访问mongoDB (一)

    最近的毕设需要用到mongoDB数据库,又把它拿出来再学一学,下盘并不是很稳,所以做一些笔记,不然又忘啦. 安装 mongoDB & mongoVUE mongoDB: https://www ...

  3. mongodb系列之--mongodb 主从配置与说明

    一.为什么要配置mongodb的主从: 1.做主从,可以说是做数据的备份,有利于故障的恢复 2.做主从,可以做到读写分离,主节点负责写操作,从节点负责读操作,这样就把读写压力分开,保证系统的稳定性. ...

  4. java操作mongodb & springboot整合mongodb

    简单的研究原生API操作MongoDB以及封装的工具类操作,最后也会研究整合spring之后作为dao层的完整的操作. 1.原生的API操作 pom.xml <!-- https://mvnre ...

  5. 学习MongoDB 一:MongoDB 入门(安装与配置)

    一.简介 MongoDB一种非关系型数据库(NoSql),是一种强大.灵活.可扩展的数据存储方式,因为MongoDB是文档模型,自由灵活很高,可以让你在开发过程中畅顺无比,对于大数据量.高并发.弱事务 ...

  6. Mongodb 笔记01 MongoDB 简介、MongoDB基础知识、启动和停止MongoDB

    MongoDB 简介 1. 易于使用:没有固定的模式,根据需要添加和删除字段更加容易 2. 易于扩展:MongoDB的设计采用横向扩展.面向文档的数据模型使它能很容易的再多台服务器之间进行分割.自动处 ...

  7. MongoDB · 引擎特性 · MongoDB索引原理

    MongoDB · 引擎特性 · MongoDB索引原理数据库内核月报原文链接 http://mysql.taobao.org/monthly/2018/09/06/ 为什么需要索引?当你抱怨Mong ...

  8. MongoDB小结01 - MongoDB简介

    我们为什么要去学习MongoDB MongoDB是一种强大.灵活.可扩展的数据存储方式. 丰富的数据模型 MongoDB是面向文档的数据库,不是关系型数据库.它将原来'行'(row)的概念换成了更加灵 ...

  9. mongodb基本命令,mongodb集群原理分析

    mongodb基本命令,mongodb集群原理分析 集合: 1.集合没有固定数据格式. 2. 数据: 时间类型: Date() 当前时间(js时间) new Date() 格林尼治时间(object) ...

  10. PHP使用MongoDB类操作MongoDB数据库总结

    参考:https://www.php.net/manual/zh/class.mongodb-driver-manager.php 参考:https://www.zhaokeli.com/articl ...

随机推荐

  1. 朴素贝叶斯python实现

    概率论是非常多机器学习算法基础,朴素贝叶斯分类器之所以称为朴素,是由于整个形式化过程中仅仅做最原始.简单的如果. (这个如果:问题中有非常多特征,我们简单如果一个个特征是独立的.该如果称做条件独立性, ...

  2. php利用反射真正实现多继承(非接口模拟)

    昨天我在写PHP程序的时候,无意发现在PHP的::操作符非常强大,不仅仅是只用在访问parent,sel,静态成员属性.常量上面,其实他的功能强大了去了 . 这个符号在PHP中实际上叫做范围解析符,这 ...

  3. 基于macOS+VMware的GNS3内VM上公网

    笔者经常需要做网络实验,GNS3就是笔者最喜欢用的模拟器,为了便于实验,需要能从macos上直接ssh登陆模拟出来的vm,并且vm需要上公网.经过研究,已解决此问题,并以此分享出来 tag: maco ...

  4. k8s 架构浅析

    文章目录 目录 Kubernetes 的电梯间演讲 Kubernetes 的核心层级对象 Kubernetes 的组件架构 Kubernetes 的组件通信协议/接口 Kubernetes 的分层架构 ...

  5. 爬虫概念与编程学习之如何爬取视频网站页面(用HttpClient)(二)

    先看,前一期博客,理清好思路. 爬虫概念与编程学习之如何爬取网页源代码(一) 不多说,直接上代码. 编写代码 运行 <!DOCTYPE html><html><head& ...

  6. linux安装lua

    1,下载lua源码wget http://www.lua.org/ftp/lua-5.3.3.tar.gz或curl -R -O http://www.lua.org/ftp/lua-5.3.3.ta ...

  7. DB2load遇到SQL3508N错误

    SQL3508N装入或装入查询期间,当存取类型为 "<文件类型>" 的文件或路径时出错.原因码:"<原因码>".路径:"< ...

  8. w3c css参考网址

    Cascading Style Sheets Level 2 Revision 2 (CSS 2.2) Specification(http://www.w3.org/TR/CSS22/) <层 ...

  9. SpringMVC视频

    视频内容: 1.下载spring mvc以及spring mvc示例演示http://pan.baidu.com/s/1kTHRfDH 2.配置完善&初步探究控制器拦截http://pan.b ...

  10. ASP.NET 页面缓存OutputCache用法实例(附ab压力测试对比图)

    本文主要介绍Web窗体页面中的使用方法,MVC中使用方法,大家自行百度. 一.简单一行指令即可实现 <%@ OutputCache VaryByParam=" %> 这样整个页面 ...