MongoDB索引

时间:2010-06-27 21:59:34

标签: ruby-on-rails mongodb mongoid

我正在转换我的Rails应用程序以通过mongoid使用mongodb。我有两个与索引有关的问题。我想我知道答案,但我希望得到mongodb有更多经验的人的确认。

让我们看一下以下示例,其中UsersPosts之间存在一个关系关联。

user.rb

class User  
    has_many_related :posts  
end

post.rb

class Post  
    belongs_to_related :user  
end

现在,当我查看通过MongoHQ界面创建的索引时,我注意到以下两点:

  1. 键名:_id_
    索引字段:_id
    独特:<blank>
    ID保证是唯一的吗?如果是这样,为什么不是唯一的设置。如果没有,我该怎么设置呢?我需要吗?

  2. 键名:user_id_1
    索引字段:user_id
    独特:false
    假设索引字段是集合中的字段名称,我是否正确?只想确认密钥名称后面有_1

3 个答案:

答案 0 :(得分:3)

是的,MongoDB中的_id始终是唯一的。这是主键,这就是为什么不需要设置UNIQUE

答案 1 :(得分:2)

以下是MongoDB Indexing Overview中非常清楚描述的索引。

_id

_id索引是_id字段上的唯一索引**,MongoDB默认在所有集合上创建此索引。您无法删除_id上的索引。

_id字段是集合的主键,每个文档都必须具有唯一的_id字段。您可以在_id字段中存储任何唯一值。 _id的默认值是每个insert()上的ObjectID

**虽然_id上的索引是唯一的,但getIndexes()方法不会在mongo shell中打印unique:true。

答案 2 :(得分:1)

如果未在MongoDB中手动指定_id值,则该类型将设置为由12字节二进制值组成的特殊BSON数据类型。

12字节值由4字节时间戳,3字节机器ID,2字节进程ID和3字节计数器组成。由于这种设计,这个值具有很高的独特概率。

参考:MongoDB权威指南:云计算和桌面计算的NoSQL数据库(书)