sh.removeRangeFromZone()
定义
行为
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()
。