我正在尝试从数组创建分片键,但它显示错误 -
ERRMSG" :"无法收集shard collection' inno.inno_pub'具有唯一索引 {mid:1.0}并建议分片键{mid:1.0,t.category:1.0, t.value:1.0}。 "除非分片键是a,否则不能保持唯一性 前缀"
答案 0 :(得分:2)
来自Kristina Chodorow的书 MongoDB - The Definitive Guide :
分片键不能是数组。
sh.shardCollection()
如果有的话会失败 key有一个数组值,并且不在该字段中插入数组 允许。插入后,文档的分片键值不能 改性。要更改文档的分片键,您必须删除 文档,更改密钥,然后重新插入。因此,你应该选择一个 字段不可更改或频繁更改。
答案 1 :(得分:0)
根据版本4.4
引入了可提炼的分片键,这仅意味着即使您已经定义了分片列,也可以通过添加/后缀/追加键以根据数据增长/添加新的更好的分布/基数来保持更细粒度的平衡。集群中的碎片
从官方source复制:
MongoDB 4.4带来了refine分片密钥本身的功能,并可以创建复合哈希分片密钥以允许在群集内进行更细粒度的数据分配。
分片键不能为数组。如果任何键具有数组值,并且{instance}不允许插入数组,则
sh.shardCollection()
将失败。
4.2版保持良好
但是,作为从4.2开始的新版本发布的重要说明,以下声明不适用。
“一旦插入,便无法修改文档的分片键值”。
所以问题的答案,可以更改分片键吗?
尽管不能为分片集合选择其他分片键,但从MongoDB 4.2开始,您可以更新文档的分片键值,除非分片键字段是不可变的_id字段