我正在尝试从数组创建分片键,但它向我显示错误-
errmsg“:“无法对具有唯一索引的集合'inno.inno_pub'进行分片{mid:1.0}和建议的分片键{mid:1.0,t.category:1.0,t。值:1.0}。 “除非分片密钥是唯一的,否则无法保持唯一性前缀“
来自Kristina Chodorow的书MongoDB - The Definitive Guide:
分片键不能为数组。
sh.shardCollection()
将失败键具有数组值,但不将数组插入该字段允许的。插入后,文档的分片键值不能为改性。要更改文档的分片键,必须删除文档,更改密钥,然后重新插入。因此,您应该选择一个不可更改或经常更改的字段。
分片键不能为数组。如果任何键具有数组值,并且不允许将数组插入该字段,则
sh.shardCollection()
将失败。
在4.2+版本上保持良好状态
但是,作为从4.2开始的新版本发布的重要说明,以下声明不适用。
“一旦插入,就无法修改文档的分片键值”。
所以问题的答案,可以更改分片键吗?
尽管不能为分片集合选择其他分片键,但从MongoDB 4.2开始,您可以更新文档的分片键值,除非分片键字段是不可变的_id字段