zoukankan      html  css  js  c++  java
  • 索引属性 稀疏索引,定时索引

    名字
      db.collection.ensureIndex({},{name:''})
      在创建索引时,mongodb会自己给索引创建默认的名字,这种名字并不好记,我们看一下mongodb是怎么给自己命名的
    唯一性:
      第二个属性,是索引的唯一性
      db.collection.ensureIndex({},{unique:true/false})
      如果设置为true,表明这个索引为唯一索引,及在同一个集合中不能插入两个唯一索引的字段
    稀疏性:
      第三个属性,是索引的稀疏性
      db.collection.ensureIndex({},{sparse:true/false})
      通过设置sparse为true或者false判断索引是否稀疏,默认情况下索引是不稀疏的
    是否定时删除:比如过期索引
      db.test2.ensureIndex({time:1},{expireAfterSeconds:30})
     

    sparse
    假设在集合中创建了x的索引,但是由于mongodb并没有严格的结构上的限制,所以在插入文档时,这其中可能并不包含x字段,这样的情况下,mongodb依然会去创建索引,如果你不希望这件事情发生,在创建索引时,就可以用sparse=true来避免他,稀疏索引的好处时显而易见的,因为他不必为不存在的字段创建索引。
    *:在使用稀疏索引时,有可能会带来一些隐患,mongodb,exixts表示是否存在
    > db.test.insert({m:1})
    WriteResult({ "nInserted" : 1 })
    > db.test.insert({n:1})
    WriteResult({ "nInserted" : 1 })
    > db.test.find({m:{$exists:true}})
    { "_id" : ObjectId("5b6a22e712d07a388813c246"), "m" : 1 }
    插了两条数据,用exists便过滤了n
    现在设置一个稀疏索引
    > db.test.ensureIndex({m:1},{sparse:true})
    {
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 2,
        "numIndexesAfter" : 3,
        "ok" : 1
    }
    再去查找不存在m的值
    > db.test.find({m:{$exists:false}})
    { "_id" : ObjectId("5b6a22ea12d07a388813c247"), "n" : 1 }
    过期索引,指的是一段时间后会过期的索引,在索引过期后,相应的数据会被删除,这适合存储一些在一段时间之后会失效的数据,比如用户的登录信息,想要用户登录信息2天后失效,需要用户重新登录,或者存储的日志,希望这些日志在一段时间后删除
     
     
    expireAfterSeconds
    建立方法
    > db.test2.ensureIndex({time:1},{expireAfterSeconds:30})
    {
        "createdCollectionAutomatically" : false,
        "numIndexesBefore" : 4,
        "numIndexesAfter" : 5,
        "ok" : 1
    }
    与普通索引不同的是,后面需要加个参数,expireAfterSecondes,他的值是秒数,用来设置过期索引的过期时间
    建立好后,我们插入一条数据
    > db.test2.insert({time:new Date()})
    WriteResult({ "nInserted" : 1 })
    再查询
    > db.test2.find()
    { "_id" : ObjectId("5b60e31524326393d99a4f64"), "x" : 1 }
    { "_id" : ObjectId("5b6235d23fb2bed9140233fd"), "x" : 1, "y" : 2, "z" : 3 }
    { "_id" : ObjectId("5b62361e3fb2bed9140233fe"), "x" : [ 1, 2, 3, 4, 5 ] }
    { "_id" : ObjectId("5b623a513fb2bed9140233ff"), "time" : ISODate("2018-08-01T22:55:13.369Z") }
    按照之前的设置,这条数据会在30s后删除,我们等待30s后,再看这条数据
    > db.test2.find()
    { "_id" : ObjectId("5b60e31524326393d99a4f64"), "x" : 1 }
    { "_id" : ObjectId("5b6235d23fb2bed9140233fd"), "x" : 1, "y" : 2, "z" : 3 }
    { "_id" : ObjectId("5b62361e3fb2bed9140233fe"), "x" : [ 1, 2, 3, 4, 5 ] }
    发现那条插入时间的数据已经不见了
     
     
  • 相关阅读:
    【转】css解决兼容的问题
    【转】.NET完美实现伪静态页面,URLRewriter.dll下载
    【技术贴】网站首页浏览量统计代码,适合.NET||网页浏览量计数器代码
    js过滤空格回车
    男人帮所有手机铃声下载|左永邦手机铃声下载,顾小白手机铃声下载,米琪手机铃声下载,艾米手机铃声下载
    孙红雷男人帮全集迅雷下载
    【技术帖】Mysql The 'InnoDB' feature is disabled; you n
    周杰伦2011所有歌曲完整版无删节全正版打包免费下载 http://115.com/file/bhr
    红警95 3D重置版 下载地址|3D95红警下载地址
    周杰伦2011所有歌曲完整版无删节全正版打包免费下载 http://115.com/file/bhr
  • 原文地址:https://www.cnblogs.com/wzndkj/p/9440598.html
Copyright © 2011-2022 走看看