mongoDB入门二

索引

索引能够使得MongoDB更高效得执行查询。如果没有索引,MongoDB必须执行集合扫描,即扫描集合中的每个文档,以选择与查询语句匹配的文档。如果查询存在适当的索引,MongoDB可以使用索引来直接处理索引对应的文档内容。 MongoDB在集合级别定义索引,并支持MongoDB集合中文档的任何字段或子字段的索引。值得注意的是,当你执行索引相关得查询时,结果会按照索引要求自动排序。

默认_id索引

MongoDB 在创建集合期间在_id字段上 创建唯一索引。该索引可防止客户端插入具有相同字段的两个文档。您不能在该字段上删除此索引。

创建索引

db.collection.createIndex( <key and index type specification>, <options> )

以下示例在name字段上创建单个键降序索引:

db.collection.createIndex( { name: -1 } )

单字段

除MongoDB定义的_id索引外,MongoDB还支持在文档的单个字段上创建用户定义的升序/降序索引。对于单字段索引和排序操作,索引键的排序顺序(即升序或降序)无关紧要,因为MongoDB可以在任一方向上遍历索引。

db.records.createIndex( { score: 1 } ) //score 在records集合的字段上创建升序索引

对嵌入式字段创建索引

db.records.createIndex( { “location.state”: 1 } )

对嵌入式文档创建索引

db.records.createIndex( { location: 1 } )

多字段(复合索引)

多字段的用户定义索引称之为复合索引

复合索引中列出的字段顺序具有重要意义。
例如,如果复合索引由{userid:1,score:-1}组成,则索引首先按用户标识排序,然后在每个用户标识值内按排名排序。

多键索引

首先,如果任何索引字段是数组,MongoDB会自动创建一个多键索引;您不需要显式指定多键类型 。同时对于多键复合索引,索引最多支持一个数组。
创建多键索引 : db.coll.createIndex( { <field>: < 1 or -1 > } )

字段排序

用单字段索引排序

如果升序索引或降序索引位于单个字段上,则字段上的排序操作可以是任一方向。

例如:

db.records.createIndex( { a: 1 } ) 在a集合的字段上创建升序索引
recordsdb.records.find().sort( { a: 1 } ) 升序排序a

用多字段索引排序

创建复合索引以支持对多个字段进行排序。

您可以在索引的所有键或子集上指定排序; 但是,排序键必须按它们在索引中出现的顺序列出。例如,一个索引键对`{ a: 1, b: 1 },可以针对{ a: 1, b: 1 }排序,但{ b: 1, a: 1 }就不行。

Explain
我们的查询结构本身就有可能不简洁优美、这时可以通过explain(),来查看一个查询(find)的explain()输出信息,可以知道查询使用了哪个索引,以及是如何使用的。
最常见的输出有两种类型:使用索引的查询和没有使用索引的查询。
MongoDB提供db.collection.explain()方法, cursor.explain()方法和explain命令,以返回有关查询计划和查询计划的执行统计信息的信息。

相关:
https://docs.mongodb.com/manual/indexes/
https://www.jb51.net/article/87983.htm
https://www.sohu.com/a/196402037_470008

    原文作者:JervieQin
    原文地址: https://www.jianshu.com/p/b4d0a50f9643
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞