sh.removeRangeFromZone()
定义
sh.removeRangeFromZone(namespace, minimum, maximum)
删除范围分分片键与区域之间的关联。
sh.removeRangeFromZone()
采用以下字段:Parameter类型说明namespace
字符串
与区域关联的分片collection的命名空间。
必须对集合进行分片才能使操作成功。
minimum
文档
分片键值范围的下限(含)。
以
<fieldname> : <value>
的形式指定分片键的每个字段。 该值必须与分片键具有相同的 BSON 类型。maximum
文档
分片键值范围的独占上限。
以
<fieldname> : <value>
的形式指定分片键的每个字段。 该值必须与分片键具有相同的 BSON 类型。使用
sh.removeRangeFromZone()
删除未使用、已过期或有冲突的分片键范围与区域之间的关联。如果没有范围与传递给
sh.removeRangeFromZone()
的最小和最大边界匹配,则不会删除任何内容。仅在连接到
mongos
实例时运行sh.removeRangeFromZone()
。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
M 0 、M 2和 M 5集群不支持此命令。 有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
行为
sh.removeRangeFromZone()
不会删除区域和分片之间的关联。 它也不会删除区域本身。
有关分片集群中区域的更多信息,请参阅区域手册页面。
平衡器
删除范围和区域之间的关联会删除在该区域内的分片上保持范围所覆盖的数据段的约束。 在负载均衡器的下一个回合中,负载均衡器可能会迁移该区域之前覆盖的数据块。
有关迁移如何在分片集群中工作的更多信息,请参阅分片集群负载均衡器的文档。
安全性
对于使用身份验证运行的分片集群,您必须通过以下任一项身份验证:
其权限包括对
config
数据库中的各种集合执行指定操作的用户:或者,或者,
权限包括对
enableSharding
集群 资源的 的用户。
clusterAdmin
或clusterManager
内置角色具有运行sh.removeRangeFromZone()
的适当权限。 有关更多信息,请参阅基于角色的访问控制的文档页面。
例子
给定一个分片键为{ a
: 1 }
的分片collectionexampledb.collection
,以下操作删除下限为1
且上限为10
的范围:
sh.removeRangeFromZone( "exampledb.collection", { a : 1 }, { a : 10 } )
min
和max
必须与目标范围的边界完全匹配。 以下操作尝试删除之前创建的范围,但将{ a : 0 }
指定为min
边界:
admin = db.getSiblingDB("admin") admin.runCommand( { updateZoneKeyRange : "exampledb.collection", min : { a : 0 }, max : { a : 10 }, zone : null } )
虽然{ a : 0 }
和{ a : 10 }
的范围包含现有范围,但它不是精确匹配,因此sh.removeRangeFromZone()
不会删除任何内容。
复合分片键
给定一个分片键为{ a : 1, b : 1 }
的分片collectionexampledb.collection
,以下操作删除下限为{ a : 1, b : 1}
且上限为{ a : 10, b : 10 }
的范围:
sh.removeRangeFromZone( "exampledb.collection", { a : 1, b : 1 }, { a : 10, b : 10 } )
在前面的示例中,如果存在下限为{ a : 1, b : 5 }
且上限为{ a : 10, b : 1 }
的现有范围,则该操作不会删除该范围,因为它与传递给 的最小值和最大值不精确匹配。 sh.removeRangeFromZone()
。