mongodb是nosql数据库吗 9 NoSQL | MongoDB入门实战教程( 三 )

3 常见索引属性
唯一索引
索引的唯一属性会导致MongoDB拒绝索引字段的重复值 。
除了唯一约束之外,唯一索引在功能上可与其他MongoDB索引互换 。
// 在users的name字段添加唯一索引db.users.createIndex({name:1},{unique:true})部分(局部)索引
顾名思义,部分索引仅索引符合特定的过滤表达式的集合中的文档 。
通过索引集合中的文档子集,部分索引具有较低的存储要求,减少索引创建和维护的性能成本 。
部分索引是稀疏索引功能的超集,应该优先于稀疏索引 。
//users集合中age>25的部分添加age字段索引db.users.createIndex({age:1},  {partialFilterExpression: {age:{$gt: 25}}})//查询age<25的document时,因为age<25的部分没有索引,会全表扫描查找(stage:COLLSCAN)db.users.find({age:23})//查询age>25的document时,因为age>25的部分创建了索引,会使用索引进行查找(stage:IXSCAN)db.users.find({age:26})稀疏索引
索引的稀疏属性可确保索引仅包含具有索引字段的文档的条目 。索引会跳过没有索引字段的文档 。
将稀疏索引与唯一索引组合,以拒绝具有字段重复值的文档,但忽略没有索引键的文档 。
-- 当document包含address字段时才会创建索引:db.userinfos.createIndex({address:1},{sparse:true})TTL索引
TTL索引是MongoDB在指定时间后自动从集合中删除文档的特殊索引 。
这是某些类型的信息的理想选择,例如机器生成的事件数据,日志和会话信息,这些信息只需要在数据库中保存有限的时间 。
//添加测试数据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"}]);//在createtime字段添加TTL索引,过期时间是120s(2分钟)db.logs.createIndex({createtime:1}, { expireAfterSeconds: 120 })需要注意的是:TTL索引只能设置在date类型字段(或者包含date类型的数组)上,过期时间为字段值+exprireAfterSeconds;document过期时不一定就会被立即删除,因为mongoDB执行删除任务的时间间隔是60s;
4 总结
本文简单介绍了MongoDB的索引的基本概念和术语,为什么MongoDB会采用B树 而 MySQL会采用B+树,常见的MongoDB索引的类型和应用,常见的索引属性及应用 。
下一篇,我们会学习MongoDB的事务管理相关知识,这是MongDB 4.x版本提供的新功能,在走向OLTP的路上迈出了坚实的一步 。
参考资料
唐建法,《MongoDB高手课》(极客时间)
郭远威,《MongoDB实战指南》(图书)
孤独烟,《为什么MySQL采用B+树而MongoDB采用B树》(cnblogs博客)


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: