Mongodb下单字段索引(Single Field Indexes)
下一篇: 复合索引(Compound Indexes)
MongoDB 完全支持集合文档中的任何字段的索引。默认情况下,所有集合都有一个名为 _id 字段的索引,并且应用程序和用户可以添加附加的索引,以支持重要的查询和操作。
MongoDB 根据操作类型的不同支持包含单个字段或多个字段的索引。本文描述包含单个字段的升序或降序索引。下图是关于单字段索引。
实例
在friedns集合中给出如下文档:
{ "_id" : ObjectId(...), "name" : "Alice", "age" : 27 }
以下的命令将name字段设置为索引:
db.friends.createIndex( { "name" : 1 } )
Cases
案例
_id Field Index
_id字段索引
MongoDB 为所有集合自动创建 _id 索引,_id 索引是自增而且唯一的。而且你不能删除 _id 字段的索引。
_id 字段作为一个集合的主键。每个文档必须有一个唯一 _id 字段。你可以在 _id 字段中存储任何不重复的值。_Id 的默认值是在客户端插入文档时自动生成的 ObjectId。ObjectId 是 12 字节的唯一标识符,该唯一标识符适合用作 _id 字段的值。
注意
在分片集群下(集合的文档中),如果你不使用 _id 字段作为分片键(文档主键),那么在你的应用程序中必须确保 _id 字段中的值的唯一性来防止出错。这最经常通过使用标准自动生成的 ObjectId 值。
在2.2版本前,固定集合(capped collections)没有一个 _id 字段。在 2.2 及更新的版本,固定集合(capped collections)都有一个 _id 字段,除了那些在本地数据库中生成的集合。
Indexes on Embedded Fields
内嵌索引
正如你可以在文档中的顶级字段编制索引,同样也可以在嵌入文档中(embedded documents)的字段上创建索引(在二级字段上创建索引)。内嵌字段的索引与内嵌文档的索引不同,其中包含了索引中嵌入文档的最大索引大小的全部内容。相反,在嵌入式字段的索引中允许你使用"点表示法"来表示内嵌文档。
看上面的描述很抽象,直接看例子就一目了然了。查看下面一个名为 people 的集合包含了如下文档内容:
{"_id": ObjectId(...), "name": "John Doe", "address": { "street": "Main", "zipcode": "53511", "state": "WI" } }
你可以对 address 字段下的 zipcode 键进行索引创建,使用以下的方法(用点表示法,即address.zipcode):
db.people.createIndex( { "address.zipcode": 1 } )
Indexes on Embedded Documents
内嵌文档索引
你同样可以创建内嵌文档索引。
例子,在 factories 集合中包含了含有 metro 字段的文档,如:
{ _id: ObjectId(123), metro: { city: "New York", state: "NY" }, name: "Giant Factory" }
在上面中,metro整个字段就属于内嵌文档(embedded document),包含了两个内嵌字段(embedded fields)city 和 state,你可以使用下面命令对metro这整个字段进行索引创建,如:
db.factories.createIndex( { metro: 1 } )
以下的查询会使用到 metro 字段的索引:
db.factories.find( { metro: { city: "New York", state: "NY" } } )
该查询会返回上述 factories 集合下 _id 为 ObjectId(123)的文档。当在嵌入文档(embedded documents)执行同等条件匹配查询时,字段的顺序是有影响的,必须和嵌入的文档(embedded documents)完全匹配。例如,下面的查询与上述文档不匹配 ︰
db.factories.find( { metro: { state: "NY", city: "New York" } } )
本文地址:http://coderschool.cn/1774.html,转载请注明。
下一篇: 复合索引(Compound Indexes)