您可以在已分片的集合上创建新的唯一索引,但前提是该索引包含分片键作为前缀。
关于此任务
索引上的唯一性约束可确保集合中的文档具有唯一的索引字段值。对于分片的集合,仅当索引是分片键或包含分片键作为前缀时, MongoDB才会强制执行唯一性。
对于已分片的集合,除非包含分片键作为前缀,否则无法在其他字段上创建唯一索引。如果索引不包含分片键作为前缀,则当您运行 命令时, MongoDB会返回错误。createIndexes
开始之前
确定集合的分片键。要查看分片键,运行
sh.status()方法并在输出中找到该集合。确认现有文档不违反该字段的唯一性约束。如果分片包含具有重复值的文档,则创建索引操作可能在没有重复项的分片上成功,但在有重复项的分片上失败,从而导致跨分片的索引不一致。
步骤
以下示例在 accounts.names集合的 email字段上创建唯一索引,该分片的在 region_id字段上分片。
1
验证分片键
sh.status()运行 方法并在输出中找到accounts.names 集合,确认分片键为region_id :
sh.status()