版本:mongodb3.4;

Index  :

  如果mongodb不能使用索引进行排序,就会将数据放入内存中进行排序,而当内存使用超过32MB时,就会报错。

  在创建索引时,应确保索引的选择力,避免多余的查询。避免没有选择力的索引。

  _id是默认的索引。

  基本方法:

      db.collection.createIndex({A:1});

      db.collection.dropIndex({A:1});       //两种方法删除。

             .dropIndex('indexName');

      db.collection.dropIndexes();

      db.collection.getIndexes();

      db.collection.reIndex();            //重建index

  

  一,Single Indexes单项索引:

    {field:1}

  二,Compound Indexes复合索引:

    {A:1,B:1}

    两个field都建立索引。

    查询:  find ( { A: value})                      //使用index;

       find(  { A:value, B:value})           //使用Index;

       find ( { }) .sort({B:1})       // nonuse; 复合索引单独使用一个时,只认第一个(A)。此处使用索引交集,可以成功。

         find( { } ).sort ({A:1})              //use

        .sort({A:1})            // use;

        .sort ({ A:1,B:1})         //use;

        .sort ( {A:-1,B:-1})        //use;

        .sort({A:-1,B:1})         // nonuse;

 

  三,Multikey Indexes多键索引:

  1。:

    document:  {A: [ 1,2,3]  }

     index:      {A:1}

    find ({A:1}) //如此使用该索引;

   2。复合索引:

    复合索引中只能出现一个多键索引,所以:

    index:{A:1,B:1}

    insert({ A:[1,2],B:[1,2]}) //error;

    insert( {A:[1,2] ,B: 1})  //pass;

   3.the array Field contain nested Objects:

    document:   {A: [ { a:1, b:2}, { a: 3, b: 4}]},

    index{ A.a : 1}  通过这样,对其建立索引;

  四,Text Index文本索引:

    通过正则来匹配文档,是很耗性能的。所以有这么一个text Index;

    使用: createIndex({A:'text'})   , 默认是使用英语。

    可以通过第二个属性来定义语言: createIndex({A:'text'}, { default_language:'hans'});

    hans是简体中文。可惜mongod企业版中才能使用中文的Text Index。

  五,Index Intersection索引交集:

    比如你有如下索引:

      index:{A:1},

      index:{B: 1,C:1},

      index { B:1}

    find (  { A:value , B :value } ) //支持

    find (  { A:value } ) .sort ( { B: 1})  //不支持

    find (  { B:value} ) .sort (   { C:1})  //支持,使用了 {B:1,C:1}这个索引,虽然有{B:1}这个single Index;

  六,Index properties索引属性:

    1,TTL(设置document过期时间):

        db.test.createIndex( {expire:1} , { expireAfterSeconds:3000} );

        建议一个expire的索引,其在document中所接受的值必须为:BSON日期类型。或者Array<BSON>;

        插入的document将在其指定的时间+3000S后被删除。

        也就是插入时,就得到了这个过期时间。mongodb周期性地,将这个过期时间与目前时间比较,小于等于目前时间时,该数据过期。比如:

          db.test.insert ({ expire : new Date()}); 就会在3000S后过期。

        接下面的例子:

 

var time= new Date();
time.setFullYear(time.getFullYear()-1); db.test.update({....},{expire:time}); //将时间改为更早,使得document提前过期;
db.test.update({....},{$currentDate:{expire:true}}) //将时间修正为当前,强行续命!

        mongdb里的expire 与Redis中是不一样的。需要多理解。

    2,Unique唯一索引:

       create( { id:1} , {unique:ture} )

         在collection中每个document的id都是唯一,重复者不能写入。

    3,Partical局部索引:

        create({ name:1}, { age:{$gt:20}});

         只对age大于20的document进行索引。与unique连用时,不被索引区不受unique限制。

    4,Sparse稀疏索引:

        create({name:1},{sparse:true});

         不使用时,当有一个及以上document没有name属性时,db.test.distinct('name') 将会返回一个null。因为查询时,遍历了这些文档。

         使用稀疏,db.test.distinct('name')。不会查询没有name属性的document。返回应得值。

         db.find({}).sort({name:1})                          //默认不会使用稀疏索引。所以这里改用强制指定索引:

         db.find({}).sort({name:1}).hint({name:1})  //强行使用name Index;

db.find({}).hint({$natural:1})                       //禁用一切索引进行查询

 

在replSet上创建索引:

    https://docs.mongodb.com/manual/tutorial/build-indexes-on-replica-sets/

Mongodb笔记(二) Index的更多相关文章

  1. MongoDB学习笔记二- Mongoose

    MongoDB学习笔记二 Mongoose Mongoose 简介 之前我们都是通过shell来完成对数据库的各种操作, 在开发中大部分时候我们都需要通过程序来完成对数据库的操作 而Mongoose就 ...

  2. NumPy学习笔记 二

    NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...

  3. Elasticsearch笔记二之Curl工具基本操作

    Elasticsearch笔记二之Curl工具基本操作 简介: Curl工具是一种可以在命令行访问url的工具,支持get和post请求方式.-X指定http请求的方法,-d指定要传输的数据. 创建索 ...

  4. Redis学习笔记二 (BitMap算法分析与BitCount语法)

    Redis学习笔记二 一.BitMap是什么 就是通过一个bit位来表示某个元素对应的值或者状态,其中的key就是对应元素本身.我们知道8个bit可以组成一个Byte,所以bitmap本身会极大的节省 ...

  5. Django学习笔记二

    Django学习笔记二 模型类,字段,选项,查询,关联,聚合函数,管理器, 一 字段属性和选项 1.1 模型类属性命名限制 1)不能是python的保留关键字. 2)不允许使用连续的下划线,这是由dj ...

  6. Django开发笔记二

    Django开发笔记一 Django开发笔记二 Django开发笔记三 Django开发笔记四 Django开发笔记五 Django开发笔记六 1.xadmin添加主题.修改标题页脚和收起左侧菜单 # ...

  7. 学习笔记(二)--->《Java 8编程官方参考教程(第9版).pdf》:第七章到九章学习笔记

    注:本文声明事项. 本博文整理者:刘军 本博文出自于: <Java8 编程官方参考教程>一书 声明:1:转载请标注出处.本文不得作为商业活动.若有违本之,则本人不负法律责任.违法者自负一切 ...

  8. muduo学习笔记(二)Reactor关键结构

    目录 muduo学习笔记(二)Reactor关键结构 Reactor简述 什么是Reactor Reactor模型的优缺点 poll简述 poll使用样例 muduo Reactor关键结构 Chan ...

  9. python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字

    python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...

  10. webpack笔记二 管理资源

    webpack笔记二 管理资源 webpack最出色的功能之一就是除了引入JavaScript,还可以通过loader引入任何其它类型的文件. 加载CSS 为了在JavaScript模块中import ...

随机推荐

  1. win7(iis7)无法加载运行CSS文件的解决方法

    在打开或关闭window功能中的Internet信息服务里的万维网服务=>常见HTTP功能=>静态内容 ,将其选上 即可了,如下图

  2. Android Activity 生成及Activity之间传值

    Activity 是Android中重要的组件,每个Activity对应一个界面,如何生成新的Activity,如何在不同Activity传递数值呢. 一. 生成新的Activity,当然要使用Int ...

  3. ssh login waiting too much time

    usually dns error, please check /etc/resolv.conf

  4. Tickets---hdu1260(简单dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1260 题意是有n个人排队买票,第 i 个人买票所需要的时间是a[i],这个人和 i-1 或者 i+1 ...

  5. 洛谷 P2331 [SCOI2005]最大子矩阵

    洛谷 这一题,乍一眼看上去只想到了最暴力的暴力--大概\(n^4\)吧. 仔细看看数据范围,发现\(1 \leq m \leq 2\),这就好办了,分两类讨论. 我先打了\(m=1\)的情况,拿了30 ...

  6. Python生成器是什么

    生成器是 Python 初级开发者最难理解的概念之一,虽被认为是 Python 编程中的高级技能,但在各种项目中可以随处见到生成器的身影,你得去理解它.使用它.甚至爱上它. 提到生成器,总不可避免地要 ...

  7. python的变量类型(Day6)

    Python的变量类型 变量可以指定不同的数据类型,这些变量可以存储整数,小数或字符. 变量赋值 Python 中的变量赋值不需要类型声明 等号(=)用来给变量赋值,等号左边为变量值,等号右边是存储在 ...

  8. day3-python的基础类源码解析——collection类

    1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 我们从中挑选一些相对常用的方法来举例: 在上面的例子我们可以看出,co ...

  9. subprocess和struct模块

    subprocess import subprocess obj = subprocess.Popen('dir',shell=True, stdout=subprocess.PIPE, stderr ...

  10. Kattis - pizzahawaii 【状态标记】

    Kattis - pizzahawaii [状态标记] Description You are travelling in a foreign country. Although you are al ...