sh.splitAt()的文档没有对查询设置任何限制,那么为什么这会导致错误:
db.cases.createIndex({"code":1},{unique:true})
sh.shardCollection("casemanagement.cases",{"code":1})
sh.splitAt("casemanagement.cases",{code:{$regex:/...........[4-6]./}})错误:
new split key {code:{$regex:/...........[4-6]./} is not valid for shard key pattern code {1.0}我找到的相关3.4个来源是cluster_split_cmd.cpp第228行,shard_key_pattern_test.cpp。为什么ShardKeyPattern关心价值方面,因为“代码”是切分键?
发布于 2017-12-20 00:22:21
MongoDB切分是基于块划分的。每个块都有其定义的最大键和最小键范围。因此,只接受一系列值而不是正则表达式模式并不令人惊讶。我同意应该在sh.splitAt()中记录这一点。
发布于 2018-01-13 03:12:09
我现在了解了sh.splitAt()真正做了什么,以及如何最好地记录它:
sh.splitAt(命名空间,查询)将碎片拆分为一个点 --该查询标识当前集合中可能存在或可能不存在的一个和唯一一个文档,将超出点的所有文档移到新块。
我正在寻找的特性可以描述为以下不存在的特性:
sh.cull(命名空间、筛选器)使用筛选器查询划分碎片,其中查询选择的文档被移动到新块中,将查询未选择的文档留在当前块中。
https://stackoverflow.com/questions/47893912
复制相似问题