唯一索引 ######## 限制:: 如果集合已经包含超出索引的唯一约束的数据(即有重复数据),则MongoDB无法在指定的索引字段上创建唯一索引。 不能在hash索引上创建唯一索引 唯一约束适用于Collection中的一个Document。 由于约束适用于单文档document,因此对于唯一的多键索引, 只要该文档document的索引键值不与另一个文档document的索引键值重复, 文档就可能具有导致重复索引键值的数组元素。 在这种情况下,重复索引记录仅插入索引一次。 唯一索引可以拒绝保存那些被索引键的值已经重复的文档。 默认情况下,MongoDB索引的 unique 属性是 false 。 在同一篇文档存储重复数据的情况下,重复的值只会被存入索引一次。 如果一篇文档不包含唯一索引的被索引键,那么索引默认会为该文档存储一个null值。 由于唯一性的限制,MongoDB将只允许有一篇可以不包含被索引键。 如果超过一篇文档不包含被索引键或没有值,那么会抛出键重复(duplicate key)错误导致索引创建失败。 可以组合使用唯一性和稀疏索引的特性来过滤那些包含null值的文档以避免这个错误。 分片Collection唯一索引只能如下:: 1. 分片键上的索引 2. 分片键是前缀的复合索引 3. 默认的_id索引; 但是,如果_id字段不是分片键或分片键的前缀,则_id索引仅对每个分片强制执行唯一性约束。 如果_id字段不是分片键,也不是分片键的前缀,MongoDB希望应用程序在分片中强制执行_id值的唯一性。 说明 ==== .. note:: mongo每次查询只会使用一次索引!!!只有$or或查询特殊,他会给每一个或分支使用索引然后再合并。 索引虽然也是持久化在磁盘中的,但为了确保索引的速度,实际上需要将索引加载到内存中使用