默认情况下,MongoDB 可能仅在迁移属于该数据段的数据时才会拆分数据块。但是,如果集群中数据量很大而数据块很少,您可能需要手动拆分数据块,就像使用现有数据部署集群后的情况一样。
要手动分割数据段,请使用带有字段middle或find的 split命令。 mongosh提供辅助方法sh.splitFind()和sh.splitAt() 。
splitFind() 将包含与该查询匹配的第一个返回文档的数据段分割成两个大小相等的数据段。您必须将分片集合的完整命名空间(即“<database>.<collection>”)指定为 splitFind()。splitFind() 中的查询不需要使用分片键,尽管这样做几乎总是有意义的。
例子
以下命令分割那些包含 records 数据库 people 集合 zipcode 字段 63109 值的数据段:
sh.splitFind( "records.people", { "zipcode": "63109" } )
使用 splitAt() 将数据段分成两部分,使用查询的文档作为新数据段的下限:
例子
以下命令分割那些包含 records 数据库 people 集合 zipcode 字段 63109 值的数据段。
sh.splitAt( "records.people", { "zipcode": "63109" } )
注意
splitAt() 不一定将数据段分割为两个大小相等的数据段。分割发生在与查询匹配的文档的位置,无论该文档位于数据段中的什么位置。