您可以更新文档的分片键值,除非分片键字段是不可变的 _id 字段。
重要
更新分片键值时
您必须位于一个
mongos上。请勿直接对分片发出此操作。您必须在查询筛选器中的完整分片键上包含相等条件。例如,考虑使用
{ activityid: 1, userid : 1 }作为分片键的messages集合。要更新文档的分片键值,必须在查询筛选器中包含activityid: <value>, userid: <value>。您可以根据需要在查询中包含其他字段。
另请参阅特定写入命令/方法,了解针对分片集合运行时的其他特定于操作的要求。
如需更新分片键值,请使用以下操作:
命令 | 方法 |
|---|---|
更新为 | |
db.collection.findOneAndReplace() db.collection.findOneAndUpdate() 如需设置为非 | |
如果分片键修改导致文档移动到另一个分片,则不能在批量操作中指定多个分片键修改;批量大小必须为 1。 如果分片键修改不会导致文档移动到另一个分片,则可以在批量操作中指定多个分片键修改。 如需设置为非 |
警告
分片集合中的文档可能缺少分片键字段。采取预防措施,避免在更改文档的分片键值时意外删除分片键。
例子
考虑在 location 字段上分片的 sales 集合。该集合包含的文档有 _id、12345 和 location ""。如需更新此文档的字段值,可以运行以下命令:
db.sales.updateOne( { _id: 12345, location: "" }, { $set: { location: "New York"} } )