索引属性 稀疏索引,定时索引

名字
  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 ] }
发现那条插入时间的数据已经不见了
 
 
原文地址:https://www.cnblogs.com/wzndkj/p/9440598.html