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

分片键

分片键 可以是单个索引 字段 ,也可以是 复合索引 覆盖的多个字段,而复合索引决定了集合 document 在集群 分片 之间的分布。有关详细信息,请参阅分片键索引

MongoDB 将分片键值(或哈希分片键值)的取值区间划分为不重叠的范围。每个范围都与一个数据块相关联,MongoDB 会尝试在集群中的分片之间均匀分布数据块。

分片键值空间被分割为较小范围或数据块的示意图。

您可以使用mongosh方法sh.shardCollection()对集合分片。要对集合分片,必须指定要分片的集合的完整命名空间和分片键。

sh.shardCollection(<namespace>, <key>) // Optional parameters omitted

namespace

指定您想要对其进行分片的集合的完整命名空间 ("<database>.<collection>")。

key

指定文档 { <shard key field1>: <1|"hashed">, ... },其中

有关分片方法的更多信息,请参阅 sh.shardCollection()

分片键的选择会影响数据的创建和在可用分片间的分配。理想的分片键可以让 MongoDB 在整个集群中均匀地分发文档,同时也有利于实施常见的查询模式。

有关详细信息,请参阅选择分片键页面。

您可以通过两种方式更改分片键:

有关详细信息,请参阅更改分片键页面。

您可以更改集合中任何 document 的分片键字段的值,除非分片键字段是 _id字段。这可能会影响 document 所在的分片。

有关详细信息,请参阅更改文档的分片键值

集合中的文档可能缺少分片键所指定的字段。默认情况下,缺少分片键指定字段的文档与具有空值的分片键位于同一数据块范围中。

有关详细信息,请参阅设置缺失的分片键字段。

使用 db.printShardingStatus() 显示用于集合的分片键。

有关详细信息,请参阅显示分片键

由次优分片键导致的常见问题有:

  • 巨型数据块

  • 负载分布不均

  • 查询性能下降

有关详细信息,请参阅分片键故障排除