要实施分片键本身的唯一性,请将 unique 参数作为 true 传递给 sh.shardCollection() 方法。
关于此任务
分片键上的唯一索引会强制整个键组合的唯一性,而不是分片键的各个组件的唯一性。
使用哈希分片键时,不能将 unique 指定为 true。
指定 unique: true 时,应用以下限制:
如果集合为空,
sh.shardCollection()会在分片键上创建唯一索引(条件是此种索引尚不存在)。如果集合不为空,则必须先创建索引,然后才能使用
sh.shardCollection()。如果集合拥有支持分片键的索引,但该索引不是唯一的,
sh.shardCollection()将返回错误。
尽管可以有以分片键为前缀的唯一复合索引,但如果使用unique参数,则集合必须在分片键上有唯一索引。
如果省略 unique 或指定 unique: false,则 sh.shardCollection() 不会更改集合的现有索引。如果分片键上的唯一索引已经存在,则该索引将保持唯一性,并且分片集群继续对跨分片的分片键键值实施唯一性约束。
开始之前
确认现有文档不违反分片键的唯一性约束。
步骤
以下示例对 region_id 上的 accounts.names集合进行分片,并对分片键实施唯一约束。
2
对集合进行分片。
在唯一的 region_id 索引上对集合分片索引。 unique 参数是 sh.shardCollection() 的第三个参数:
sh.shardCollection( "accounts.names", { region_id: 1 }, true )