Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

mergeChunks

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 访问控制
  • 行为
  • 返回消息
mergeChunks

对于分片的集合, mergeChunks将分片上连续的数据块范围分片为单个数据块。 mergeChunksadminmongos 实例对 数据库发出 命令。

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务

重要

无服务器实例不支持此命令。 有关更多信息,请参阅不支持的命令。

该命令具有以下语法:

db.adminCommand(
{
mergeChunks: <namespace>,
bounds : [
{ <shardKeyField>: <minFieldValue> },
{ <shardKeyField>: <maxFieldValue> }
]
}
)

对于复合分片键,您必须在bounds规范中包含完整的分片键。 例如,如果分片键为{ x: 1, y: 1 } ,则mergeChunks的形式如下:

db.adminCommand(
{
mergeChunks: <namespace>,
bounds: [
{ x: <minValue>, y: <minValue> },
{ x: <maxValue>, y: <maxValue> }
]
}
)

该命令接受以下字段:

字段
类型
说明

mergeChunks

namespace

两个数据块都 存在 的collection的完全限定 命名空间 。命名空间采用<database>.<collection>的形式。

bounds

阵列

包含新数据段的最小和最大键值的数组。

在使用authorization运行的部署中,内置角色clusterManager提供所需的权限。

注意

仅在特殊情况下使用mergeChunks 。 例如,在删除许多文档后清理分片集群时。

为了成功合并数据块,必须满足以下条件:

  • bounds字段中, <minkey><maxkey>必须对应于要合并的数据块的下限和上限。

  • 这些数据段必须驻留在同一分片上。

  • 数据块必须是连续的。

mergeChunks 如果不满足这些条件,则会返回错误。

成功后, mergeChunks将返回此文档:

{
"ok" : 1,
"$clusterTime" : {
"clusterTime" : Timestamp(1510767081, 1),
"signature" : {
"hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
"keyId" : NumberLong("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

mergeChunks如果正在对chunks 集合执行另一个元数据操作, 将返回以下错误消息:

errmsg: "The collection's metadata lock is already taken."

如果其他进程(例如负载均衡器进程)在mergeChunks运行时更改元数据,则可能会看到此错误。 您可以重试mergeChunks操作,不会产生副作用。

如果输入数据不在同一片上, mergeChunks将返回类似于以下内容的错误:

{
"ok" : 0,
"errmsg" : "could not merge chunks, collection test.users does not contain a chunk ending at { username: \"user63169\" }",
"$clusterTime" : {
"clusterTime" : Timestamp(1510767081, 1),
"signature" : {
"hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
"keyId" : NumberLong("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

如果输入数据不连续, mergeChunks将返回类似于以下内容的错误:

{
"ok" : 0,
"errmsg" : "could not merge chunks, collection test.users has more than 2 chunks between [{ username: \"user29937\" }, { username: \"user49877\" })"
"$clusterTime" : {
"clusterTime" : Timestamp(1510767081, 1),
"signature" : {
"hash" : BinData(0,"okKHD0QuzcpbVQg7mP2YFw6lM04="),
"keyId" : NumberLong("6488693018630029321")
}
},
"operationTime" : Timestamp(1510767081, 1)
}

后退

moveRange