文档菜单
文档首页
/
MongoDB 手册
/ /

更改文档的分片键值

本页内容

  • 示例

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

重要

在更新分片键值时

  • 您必须在一个mongos上。不要直接在分片上执行操作。

  • 您必须在事务中运行,或者作为一个可重试写操作。

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

有关针对分片集合运行的特定写命令/方法以及额外的操作特定要求,请参阅相关内容。

要更新分片键值,请使用以下操作

命令
方法
update 使用 multi: false

要将值设置为非null,更新必须在事务内部或作为可重试写操作执行。

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

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

要将值设置为非null,操作必须

警告

分片集合中的文档可能缺少分片键字段。在更改文档的分片键值时要小心,以避免意外删除分片键。

考虑一个在location字段上分片的sales集合。该集合包含一个具有_id 12345location ""的文档。要更新该文档的字段值,可以运行以下命令

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

提示

另请参阅

返回

重新分配集合

本页内容