• Mongodb 学习笔记5:索引


    索引是用来加速查询的。

    创建索引:

    >db.person.ensureIndex({"name":1})  ------1表示升序,-1表示降序

    一般一定要创建查询中用到的所有键的索引,索引才会在查询启作用。

    >db.person.find({"date":date1}).sort({"date":1,"name":1})       

    上述查询必须进行表扫描,需要进行以下操作:

    >db.person.ensureIndex({“date”:1,"name":1}) 

    组合索引键的排列不同,建立的索引不同。

    默认下索引名为:keyname1_dir1_keyname2_dir2_keyname3_dir3……这种形式,dir代表索引的方向1或者-1.可以给索引命名:

    >db.person.ensureIndex({“date”:1,"name":1},{"name":"date_name")

    explain()返回查询使用的索引情况,耗时及扫描文档数的统计信息。 

    索引建立是要花费很多时间的,可以使用{"background”:true}选项是创建过程在后台运行。

    下图显示了索引创建前后的性能对比:

       cursor:       mongodb采用B树的结构来存放索引,索引名为后面的“name_1"。

       nscanned:  代表查找了多少个文档。

       n:             返回文档的数量

       millis:       执行所需的时间

    创建唯一索引

    >db.person.ensureIndex({“date”:1,"name":1},{"unique":"true"})

    insert不检查文档是否插入过了。

    当为已有集合创建索引,有些文档值已经重复了,则使用dropDups选项,保留第一个文档。

    >db.person.ensureIndex({“date”:1,"name":1},{"unique":"true","dropDups":true})

    唯一复合索引:单个键值可以相同,但所有键值组合不同。

    删除索引:dropIndexes


    地理空间索引:找到离当前位置最近的N个场所,为坐标平面查询建立索引

    gps"键的值是一个包含两个元素的数组或者两个键的内嵌文档,键名可以任意。默认情况下值的范围:-180~180。可以指定最大最小值。

    >db.map.ensureIndex({"gps":"2d"})      

    >db.map.ensureIndex({"gps":"2d"},{"min":-1000,"max":1000}   

    "{"gps":[0,100]}

    {"gps":{”x":-30,"y":30})

    {"gps":{"latitude":-180,"longitude":180}}

    地理空间查询

    find():"$near":两个目标值数组作为参数。

    >db.map.find({"gps":{"$near":[40,-73]}})

    按照离点(40,-73)由近及远的方式将map集合的所有文档都返回。默认返回100个文档。

    >db.map.find({"gps":{"$near":[40,-73]}}).limit(10)

    以下操作同样完成上述功能,还返回每个文档到查询点的距离。

    >db.runCommand({geoNear:"map",near:[40,-73],num:10});

    还可以找指定形状内的文档:

    >db.map.find({"gps":{"$within":{”$box":[[10,20],[15,30]]}}})

    "$box":第一个参数指定左下角的坐标,第二个参数指定右上角的坐标

    "$center":指定圆心和半径:

    >db.map.find({"gps":{"$within":{”$center":[[12,25],5]}}})

    符合地理空间索引

    >db.map.ensureIndex({"gps":"2d","desc":1})    

    查找最近的咖啡馆:

    >db.map.find({"gps":{"$near":[40,-73]},"desc":"coffeeshop"}).limit(1)

  • 相关阅读:
    【一些思路】web和app测试的区别
    【Python】I/O和比赛的其他一些问题
    【Python】迭代器和生成器的个人理解,再讲一讲协程
    【TCP/IP】如果打不开一个网页,需要如何处理?
    DOM事件
    GASP动画的基本使用
    Velocity的使用方法
    Swiper和Swiper Animate使用方法
    DOM操作
    JavaScript函数
  • 原文地址:https://www.cnblogs.com/lucyawei/p/3048967.html
Copyright © 2020-2023  润新知