OPTIONS
翻译或纠错本页面

唯一索引

唯一索引可以让MongoDB拒绝保存那些被索引键的值已经重复的文档。

如果希望创建一个唯一索引,请使用 db.collection.ensureIndex() 方法并将 unique 选项设置为 true 。例如,在 members 集合的 user_id 键上建立一个唯一索引,可以在 mongo shell中执行如下操作:

db.members.ensureIndex( { "user_id": 1 }, { unique: true } )

默认情况下,MongoDB索引的 unique 属性是 false

如果您对 复合索引 施加唯一性的限制,那么MongoDB就会强制要求 复合值 的唯一性,而不是分别对每个单独的值要求唯一。

特性

跨文档的唯一性限制

唯一性的限制是针对一个集合中不同文档的。也即,唯一索引可以防止 不同 文档的被索引键上存储相同值,但是它不禁止同一篇文档在被索引键存储的数组里存储的元素或者内嵌文档是相同的值。在同一篇文档存储重复数据的情况下,重复的值只会被存入索引一次。

例如,一个集合有一个唯一索引 a.b

db.collection.ensureIndex( { "a.b": 1 }, { unique: true } )

假如在集合中没有其他的文档的 a.b 键的值是 5 ,那么唯一索引将会允许将以下文档插入集合:

db.collection.insert( { a: [ { b: 5 }, { b: 5 } ] } )

唯一索引与被索引键缺失(Missing Field)

如果一篇文档不包含唯一索引的被索引键,那么索引默认会为该文档存储一个null值。由于唯一性的限制,MongoDB将只允许有一篇可以不包含被索引键。如果超过一篇文档不包含被索引键或没有值,那么会抛出键重复(duplicate key)错误导致索引创建失败。

您可以组合使用唯一性和 稀疏索引 的特性来过滤那些包含null值的文档以避免这个错误。

限制

您不能对 哈希索引 指定唯一性的限制。

←   TTL索引 稀疏索引  →