0

Mongodb下单字段索引(Single Field Indexes)

Posted by 撒得一地 on 2016年4月8日 in Mongodb教程

MongoDB 完全支持集合文档中的任何字段的索引。默认情况下,所有集合都有一个名为 _id 字段的索引,并且应用程序和用户可以添加附加的索引,以支持重要的查询和操作。

MongoDB 根据操作类型的不同支持包含单个字段或多个字段的索引。本文描述包含单个字段的升序或降序索引。下图是关于单字段索引。

图中的score字段为升序索引

实例

在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,转载请注明。

上一篇:

下一篇:

相关推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注

6 + 7 = ?

网站地图|XML地图

Copyright © 2015-2017 技术拉近你我! All rights reserved.
闽ICP备15015576号-1,版权所有©psz.