mongoDB中常用的索引属性

2021/4/26 19:28:20

本文主要是介绍mongoDB中常用的索引属性,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

db.userinfos.insertMany([
   {_id:1, name: "张三", age: 23,level:10, ename: { firstname: "san", lastname: "zhang"}, roles: ["vip","gen" ]},
   {_id:2, name: "李四", age: 24,level:20, ename: { firstname: "si", lastname: "li"}, roles:[ "vip" ]},
   {_id:3, name: "王五", age: 25,level:30, ename: { firstname: "wu", lastname: "wang"}, roles: ["gen","vip" ]},
   {_id:4, name: "赵六", age: 26,level:40, ename: { firstname: "liu", lastname: "zhao"}, roles: ["gen"] },
   {_id:5, name: "田七", age: 27, ename: { firstname: "qi", lastname: "tian"}, address:'北京' },
   {_id:6, name: "周八", age: 28,roles:["gen"], address:'上海' }
]);

db.logs.insertMany([
    { _id: 1, createtime: new Date(), msg: "log1" },
    { _id: 2, createtime: new Date(), msg: "log2" },
    { _id: 3, createtime: new Date(), msg: "log3" },
    { _id: 4, createtime: new Date(), msg: "log4" }
])


1  唯一索引

唯一索引(unique indexes)用于为collection添加唯一约束,即强制要求collection中的索引字段没有重复值。注意:不能用到哈希索引上
添加唯一索引的语法:

db.userinfos.createIndex({"name":1},{unique:true})


2  局部索引

大白话来讲,就是满足一定的条件,才添加到索引  
局部索引(Partial Indexes)顾名思义,只对collection的一部分添加索引。创建索引的时候,根据过滤条件判断是否对document添加索引,对于没有添加索引的文档查找时采用的全表扫描,对添加了索引的文档查找时使用索引:

//userinfos集合中age>25的部分添加age字段索引
    db.userinfos.createIndex(
        {age:1},
        { partialFilterExpression: {age:{$gt: 25 }}}
    )

//查询age<25的document时,因为age<25的部分没有索引,会全表扫描查找(stage:COLLSCAN)
    db.userinfos.find({age:23})

//查询age>25的document时,因为age>25的部分创建了索引,会使用索引进行查找(stage:IXSCAN)
    db.userinfos.find({age:26})

 结论:当查询age=23的记录时,stage=COLLSCAN,当查询age=26的记录时,使用了索引


3 稀疏索引 

 大白话来讲,就是一条记录,必须包含此字段,才会建索引,如

//在address字段上建稀疏索引
db.userinfos.createIndex({ address: 1 }, { sparse: true })

//演示索引失效的情况
//如果一个间隙索引会导致查询或者排序操作得到一个不完整结果集的时候,MongoDB将不会使用这个索引
db.userinfos.find().sort({ address: 1 }).explain()

//强制走索引,注意:查询的记录会不全,只查到有address字段的记录
db.userinfos.find().hint({ address: 1 })

 

4 TTL索引

  TTL索引(TTL indexes)是一种特殊的单键索引,用于设置document的过期时间,mongoDB会在document过期后将其删除,TTL非常容易实现类似缓存过期策略的功能。

//在createtime字段添加TTL索引,过期时间是120s
//logs中的document在创建后的120s后过期,会被mongoDB自动删除
db.logs.createIndex({createtime:1}, { expireAfterSeconds: 120 })

注意:TTL索引只能设置在date类型字段(或者包含date类型的数组)上,过期时间为字段值+exprireAfterSeconds;document过期时不一定就会被立即删除,因为mongoDB执行删除任务的时间间隔是60s;
capped Collection 就是固定集合,不能设置TTL索引,因为mongoDB不能主动删除capped Collection中的document。
固定集合的详细描述,可查看博文
https://www.runoob.com/mongodb/mongodb-capped-collections.html



这篇关于mongoDB中常用的索引属性的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程