这可能是一个有明显答案的愚蠢问题,但是如何将具有最小/最大散列键的块拆分为下限/上限?
例如,我想要拆分这个块:
{
"_id" : "database-name.collectionName-_id_5232174760913548110",
"lastmod" : Timestamp(5, 1),
"lastmodEpoch" : ObjectId("5474796988a23861ead5dc60"),
"ns" : "database-name.collectionName",
"min" : {
"_id" : NumberLong("5232174760913548110")
},
"max" : {
"_id" : { "$maxKey" : 1 }
},
"shard" : "dimA"
}
我尝试将它拆分为:
db.adminCommand( {
split: "database-name.collectionName",
bounds: [{_id: NumberLong("5232174760913548110")}, {{_id: {"$maxKey" : 1}}}] } )
,但因错误消息“从给定的上限和下限找不到块”而失败。
该命令适用于不是最大/最小键的块,所以我认为我不应该使用{_id: {"$maxKey" : 1}}
作为上限。
有什么想法吗?
谢谢,
尼娜。
答案 0 :(得分:1)
这基本上只是关于如何显示$maxKey
与如何将它传递到shell以在命令中使用它。最简单的方法是展示一个工作示例,所以这是我的测试集合的原始布局(foo.bar
):
foo.bar
shard key: { "_id" : "hashed" }
chunks:
shard0000 3
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong("-4097713469691957209") } on : shard0000 Timestamp(1, 3)
{ "_id" : NumberLong("-4097713469691957209") } -->> { "_id" : NumberLong("1468066378930898747") } on : shard0000 Timestamp(1, 4)
{ "_id" : NumberLong("1468066378930898747") } -->> { "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 2)
要拆分最后一个块,只需执行此操作:
db.adminCommand( {
split: "foo.bar",
bounds: [{_id: NumberLong("1468066378930898747")}, {_id: MaxKey}] } )
{ "ok" : 1 }
现在,为了证明它发生了,布局看起来像这样:
foo.bar
shard key: { "_id" : "hashed" }
chunks:
shard0000 4
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : NumberLong("-4097713469691957209") } on : shard0000 Timestamp(1, 3)
{ "_id" : NumberLong("-4097713469691957209") } -->> { "_id" : NumberLong("1468066378930898747") } on : shard0000 Timestamp(1, 4)
{ "_id" : NumberLong("1468066378930898747") } -->> { "_id" : NumberLong("5350365356528563634") } on : shard0000 Timestamp(1, 5)
{ "_id" : NumberLong("5350365356528563634") } -->> { "_id" : { "$maxKey" : 1 } } on : shard0000 Timestamp(1, 6)