美文网首页
MongoDB索引

MongoDB索引

作者: engineer_tang | 来源:发表于2021-09-11 18:39 被阅读0次

    1. 单字段索引

    对普通字段创建索引

    db.book.ensureIndex({title: 1})
    

    对内嵌的文档字段创建索引

    db.book.ensureIndex({author.name: 1})
    

    2. 复合索引

    复合索引的字段顺序、字段的升降序对查询性能有影响,

    db.book.ensureIndex({type: 1, favCount: 1})
    

    3. 数组索引

    也叫多值索引,

    db.book.ensureIndex({tags: 1})
    

    数组索引必然会使索引的条目和体积发生膨胀。为了避免时空,有必要在文档设计上做出一些限制。

    4. 复合的多值索引

    MongoDB不支持一个复合索引中同时出现多个数组字段。

    5. 地理空间索引

    专门用于实现位置检索的一种特殊索引。
    例如:

    {
      restaurantId: 0,
      restaurantName: "兰州牛肉面",
      location: {
        type: "Point",
        coordinates: [37.449157, -122.158574]
      }
    }
    

    location字段是一个内嵌型文档,用于表明商家的地理位置,其中type表示这是地图上的一个点,coordinates则是经纬度。
    接下来创建一个2dsphere索引,如下:

    db.restaurant.ensureIndex({location: "2dsphere"})
    

    最后,执行查询,检索附件5千米内的商家,如下:

    b.restaurants.find({
      location: {
        $near: {
          $geometry: {type: "Point", coordinates: [37.449, -122.158]}},
          $maxDistance: 5000
      }
    })
    

    6. 唯一性约束

    例如

    db.book.ensureIndex({title: 1}, {unique: true})
    

    对于制定字段已经存在重复记录的集合,尝试创建唯一性索引会报错。

    6.1 复合索引的唯一性

    db.book.ensureIndex({type: 1, title: 1}, {unique: true})
    

    6.2 嵌套文档的唯一性

    db.book.ensureIndex({author.name: 1}, {unique: true})
    

    6.4 数组的唯一性

    7. TTL索引

    对于老化数据的处理,MongoDB提供了便捷的做法,TTL索引,通过声明一个日期类型的字段,然后在日期字段上加上TTL索引:

    db.systemlog.insert({createdDate: new Date(), type: "alarm", message: "..."})
    db.systemlog.ensureIndex({createdDate: 1}, {expireAfterSeconds: 3600})
    

    创建TTL索引后,该数据会在3600秒后过期,MongoDB会周期性运行后台线程中对该集合进行检查及数据清理工作。

    相关文章

      网友评论

          本文标题:MongoDB索引

          本文链接:https://www.haomeiwen.com/subject/vypowltx.html