【MongoDB学习笔记23】MongoDB的索引对象和数组

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

MongoDB允许深入文档内部,对嵌套字段和数组建立索引;嵌套对象和数组字段可以和复合索引中的顶级字段一起使用,多数情况下与“正常”索引字段的行为也是一致的。

 

一、索引嵌套文档

例如,集合中的文档如下格式,

1
2
3
4
5
6
7
8
9
10
11
> db.post.findOne({ "username" : "sid" })   
{    
     "_id"  : ObjectId( "54aff7f43bd1048e7b585e39" ),    
     "username"  "sid" ,    
     "loc"  : {    
         "ip"  "1.2.3.4" ,    
         "city"  "springfield" ,    
         "state"  "ny"    
     }    
}    
>

需要在“loc”的city上建立索引来提高这个loc.city字段的查询速度:

1
2
3
4
5
6
7
8
> db.post.ensureIndex({ "loc.city" :1})   
{    
     "createdCollectionAutomatically"  false ,    
     "numIndexesBefore"  : 1,    
     "numIndexesAfter"  : 2,    
     "ok"  : 1    
}    
>

利用这种方式可以建立任意深度的索引,例如可以在X.Y.Z.A.B.C上建立索引。

但是,针对子文档“loc”上建立的索引,和建立在子文档的某个字段“loc.city”上的索引是不同的:

(1)对整个子文档上建立的索引,只会提高整个子文档的的查询速度;也就是说只有在完全匹配子文档的查询(包括字段顺序),子文档索引才会起作用;

(2)只有查询loc.city字段,索引loc.city才会起作用,其他情况索引loc.city不起作用;

 


二、数组上的索引

(1)可以看得出在数组字段上建立索引的代价比较大,因为每次的删除,更新都会对每一个索引进行刷新,太消耗服务器的资源;

(2)可以针对数组字段中的某一个元素做具体的单独索引,减少索引的数量;例如,在数组字段comments中的第九个元素中的votes上建立索引:

1
> db.post.ensureIndex({ "comment.10.votes" :1})

同样,只有精确匹配comment.10.votes查询,上述索引才会起到索引的作用。

 

三、多键索引

如果在数组字段上创建索引,那么这个索引称为多键索引( multikey)。

多键索引用explain函数中可以看到“isMultikey”字段的值为true,多键索引比非多键索引要慢一些;





本文转自 bannerpei 51CTO博客,原文链接:http://blog.51cto.com/281816327/1601473,如需转载请自行联系原作者
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
1月前
|
监控 NoSQL MongoDB
【MongoDB】MongoDB 索引
【4月更文挑战第1天】【MongoDB】MongoDB 索引
|
4月前
|
存储 NoSQL 关系型数据库
|
7月前
|
NoSQL MongoDB 索引
【最佳实践】MongoDB导入数据时重建索引
【最佳实践】MongoDB导入数据时重建索引
180 0
|
8月前
|
JSON NoSQL MongoDB
mongodb基本操作,增删改查,查询,索引,权限机制
mongodb基本操作,增删改查,查询,索引,权限机制
|
7月前
|
NoSQL MongoDB 索引
开心档-软件开发入门之MongoDB 覆盖索引查询
开心档-软件开发入门之MongoDB 覆盖索引查询
49 0
|
1天前
|
NoSQL 测试技术 定位技术
【MongoDB 专栏】MongoDB 的地理空间索引与位置查询
【5月更文挑战第10天】MongoDB 支持地理空间数据处理,提供2dsphere(球面)和2d(平面)索引,适用于地图导航、物流、社交网络等领域。通过创建索引,可加速位置查询,如查询范围、最近邻及地理空间聚合。案例包括地图应用、物流追踪和社交网络。注意数据准确性、索引优化和性能测试,以发挥其在地理空间处理中的潜力。学习此功能,为应用开发解锁更多可能性!
【MongoDB 专栏】MongoDB 的地理空间索引与位置查询
|
1天前
|
存储 NoSQL MongoDB
【MongoDB 专栏】如何高效使用 MongoDB 的索引
【5月更文挑战第10天】MongoDB的索引是提升查询性能的关键,它基于B树结构,分为单字段、复合、多键和文本索引。创建索引可通过`createIndex()`或管理工具,适用于频繁查询、排序分组和连接操作。优化策略包括选择合适字段、避免过度索引和定期评估。注意索引影响写入性能、大小限制及可能的失效情况。通过案例分析,应根据业务需求合理创建和使用索引,以实现最佳性能。
【MongoDB 专栏】如何高效使用 MongoDB 的索引
|
10天前
|
存储 NoSQL 关系型数据库
【MongoDB系列笔记】索引
索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须执行全集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
21 1
|
11天前
|
监控 NoSQL MongoDB
MongoDB索引机制与优化策略详解
【4月更文挑战第30天】本文深入解析MongoDB的索引机制,包括单字段、复合、地理空间、全文及哈希索引。介绍了创建与查看索引的方法,并提出了优化策略:选择性创建、使用复合索引、定期审查优化、避免不必要的索引扫描、利用索引前缀与覆盖索引,以及监控索引使用。通过这些策略,可提升MongoDB查询性能。
|
12天前
|
存储 JSON DataWorks
DataWorks产品使用合集之DataWorks将 MongoDB 中的数组类型写入到 DataWorks 的单个字段时,表示为字符串格式而非 JSON 格式如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
25 3