Docs 菜单

Docs 主页开发应用程序MongoDB Manual

更改文档的分区密钥值

在此页面上

  • 例子

您可以更新文档的分片键值,除非分片键字段是不可变的 _id字段。

重要

更新分片键值时

  • 必须位于一个 mongos 上。请直接对分片发出此操作。

  • 必须事务中或者作为可重试写入运行。

  • 必须在查询筛选器中的完整分片键上包含相等条件。例如,考虑使用 { activityid: 1, userid : 1 } 作为分片键的 messages 集合。要更新文档的分片键值,必须在查询筛选器中包含 activityid: <value>, userid: <value>。您可以根据需要在查询中包含其他字段。

另请参阅特定写入命令/方法,了解针对分片集合运行时的其他特定于操作的要求。

如需更新分片键值,请使用以下操作:

命令
方法
更新multi: false

要设置为非 null 值,必须在事务中或以可重试写入的方式执行更新

如需设置为非 null 值,必须在事务中或以可重试写入的方式执行更新。

如果分片键修改导致文档移动到另一个分片,则不能在批量操作中指定多个分片键修改;批量大小必须为 1。

如果分片键修改不会导致文档移动到另一个分片,则可以在批量操作中指定多个分片键修改。

如需设置为非 null 值,必须在事务中或作为可重试写入操作执行。

警告

在sharded collection中的文档可能缺少分片键字段。在更改文档的分片键值时,请采取预防措施,避免意外删除分片键。

考虑在 location 字段上分片的 sales 集合。该集合包含的文档有 _id12345location ""。如需更新此文档的字段值,可以运行以下命令:

db.sales.updateOne(
{ _id: 12345, location: "" },
{ $set: { location: "New York"} }
)

提示

← 对集合重新分片

在此页面上