3

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

让我们看看下面的例子,我在Users和之间有一个关系关联Posts

用户.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后面有它。

4

3 回答 3

3

是的,_id在 MongoDB 中总是独一无二的。它是主键,这就是为什么UNIQUE不需要设置的原因。

于 2010-06-27T23:35:18.300 回答
2

这是 MongoDB Indexing Overview中非常清楚地描述的索引。

_ID

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

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

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

于 2012-10-12T10:38:53.673 回答
1

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

12 字节的值由 4 字节的时间戳、3 字节的机器 ID、2 字节的进程 ID 和 3 字节的计数器组成。由于这种设计,该值具有相当高的唯一性概率。

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

于 2012-02-16T06:48:00.650 回答