OPTIONS
翻译或纠错本页面

创建一个唯一索引

MongoDB允许对一个索引指定 唯一性限制 .这个限制会阻止应用插入被索引键上的值是重复值的 documents 。此外,如果您希望在已经存储了数据并且被索引键的值有可能重复的集合上创建索引,那么您可以选择将唯一性和 删除重复 选项组合使用。

唯一索引

请看如下操作,创建一个 唯一索引

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

例如,您可能希望在集合 accounts"tax-id": 键上创建一个唯一索引,以避免对同一法人存储多条帐目记录:

db.accounts.ensureIndex( { "tax-id": 1 }, { unique: true } )

索引 _id 索引 就是一个唯一索引。在某些情况下您可以考虑使用 _id 键的值本身作为这类唯一数据,而不需要在其他键上创建一个唯一索引。

在许多场合下您可能希望组合使用 uniquesparse 选项。当MongoDB索引一个键时,如果一篇文档中这个键没有值,那么这篇文档对应的索引项将会是 null 。但是由于唯一索引不允许在一个键上有重复值(在没有 sparse 选项时),MongoDB将会拒绝保存从第二篇起及其之后的所有不包含这个键的文档。请看如下操作:

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

您也可以对 复合索引 施加唯一性限制,如下:

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

这个索引会强制要求 复合 键值的唯一性,而 不是 每个键的唯一性。

删除重复

如果您希望在一个被索引键的值有重复的集合上创建 唯一索引 ,您可以使用 dropDups 选项。这会使MongoDB在创建索引时,通过删除带有重复值的文档的方式来强制创建一个 唯一 索引。请看如下 ensureIndex() 方法的执行:

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

参见完整文档 删除重复 来了解更多。

警告

指定 { dropDups: true } 选项可能会导致从数据库中删除数据。使用时需慎思。

参见 ensureIndex() 文档来了解更多创建索引的选项。