对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

强制分片键值的唯一性

要实施分片键本身的唯一性,请将 unique 参数作为 true 传递给 sh.shardCollection() 方法。

分片键上的唯一索引会强制整个键组合的唯一性,而不是分片键的各个组件的唯一性。

使用哈希分片键时,不能将 unique 指定为 true。

指定 unique: true 时,应用以下限制:

  • 如果集合为空,sh.shardCollection()会在分片键上创建唯一索引(条件是此种索引尚不存在)。

  • 如果集合不为空,则必须先创建索引,然后才能使用sh.shardCollection()。

  • 如果集合拥有支持分片键的索引,但该索引不是唯一的,sh.shardCollection() 将返回错误。

尽管可以有以分片键为前缀的唯一复合索引,但如果使用unique参数,则集合必须在分片键上有唯一索引。

如果省略 unique 或指定 unique: false,则 sh.shardCollection() 不会更改集合的现有索引。如果分片键上的唯一索引已经存在,则该索引将保持唯一性,并且分片集群继续对跨分片的分片键键值实施唯一性约束。

有关应用于分片的片集合上唯一索引的完整约束设立,请参阅在分片集群中维护唯一性。

以下示例对 region_id 上的 accounts.names集合进行分片,并对分片键实施唯一约束。

1
use accounts
db.names.createIndex( { "region_id": 1 }, { unique: true } )
2

在唯一的 region_id 索引上对集合分片索引。 unique 参数是 sh.shardCollection() 的第三个参数:

sh.shardCollection( "accounts.names", { region_id: 1 }, true )