MongoDB给集合文档中的任意字段提供了完整的索引。默认情况下,所有的集合在_id字段拥有一个索引,应用和用户可以添加额外的索引来支持重要的查询和操作。
本文描述在单一字段上添加升序/降序索引
一、在单一字段上添加升序索引
考虑一个名字为records的集合,假设它有个文档的内容如下:
{ "_id": ObjectId("570c04a4ad233577f97dc459"), "score": 1034, "location": { state: "NY", city: "New York" } }
则下面的操作将会在records集合的score字段上创建一个升序索引:
db.records.createIndex({score:1})
索引详情里面的字段值描述了在该字段上使用的索引类型。例如字段后面跟着的1表示该字段是升序索引,-1表示该字段使用降序索引。
创建的索引将会当查询score字段的时候使用到,例如:
db.records.find({score:2})
db.records.find{score:{$gt:10}})
二、在内嵌字段上创建索引
可以在内嵌的文档字段上创建索引,就像你在最外层文档字段上创建索引一样。可以使用逗号标记符来在内嵌文档字段上创建索引:
假设有个集合records有如下的文档内容:
{ "_id": ObjectId("570c04a4ad233577f97dc459"), "score": 1034, "location": { state: "NY", city: "New York" } }
则下面的操作将会在location.state上创建一个索引:
db.records.createIndex({"location.state":1})
上面创建的索引可以在查询字段location.state的时候用到,例如:
db.records.find({"location.state":"CA"})
db.recodrd.find({"location.city":"albany","location.state":"NY"})
三、在内嵌文档上创建索引
也可以在整个内嵌文档上面创建索引
假如在集合records里面存在如下的文档内容:
{ "_id": ObjectId("570c04a4ad233577f97dc459"), "score": 1034, "location": { state: "NY", city: "New York" } }
location
字段是一个内嵌文档,包含内嵌的字段:city和state。下面的命令将会在location字段上面创建一个索引:
db.records.createIndex({location:1})
下面的查询将会使用到location字段索引:
db.records.find({location:{city:"New York",state:"NY"}})
注意:尽管该查询可以使用索引,但是结果集并不包含上述样例,当在内嵌文档上执行等值匹配的时候,将会严格匹配内嵌文档的字段顺序。