我正试图从数组中创建切分键,但它显示了错误-
errmsg“:”不能在{ mid: 1.0 }和建议的碎片键{ mid: 1.0,t.category: 1.0,t.value: 1.0 }上使用唯一的索引来分割集合‘t.value’。“除非碎片键是前缀,否则不能保持唯一性”
发布于 2015-05-29 09:24:05
碎片键不能是数组。如果任何键都有数组值,并且不允许在该字段中插入数组,
sh.shardCollection()将失败。插入文档后,无法修改文档的碎片键值。若要更改文档的碎片键,必须移除文档、更改密钥并重新插入。因此,您应该选择一个不可更改或经常更改的字段。
发布于 2020-01-07 14:15:08
根据4.4版
引入了可细化的切分键,这意味着即使在定义了碎片级之后,也可以通过添加/后缀/追加键来保持更细粒度级别的再平衡,以便按照集群中的数据增长/添加新的碎片来更好地分配/基数。
从官方来源复制
MongoDB 4.4提供了精练切分键本身的功能,并能够创建复合散列碎片密钥,以便在集群中进行更细粒度的数据分发。
碎片键不能是数组。如果任何键都有数组值,并且不允许在该字段中插入数组,
sh.shardCollection()将失败。
适用于4.2版
但是,作为一个重要的注意事项,新版本从4.2开始发布,下面的声明不适用。
“一旦插入,文档的碎片键值就不能被修改”。
因此,对这个问题的答案是,可以修改密钥吗?
虽然不能为切分集合选择不同的碎片键(从MongoDB 4.2开始),但可以更新文档的碎片键值,除非shard键字段是不可变的_id字段
https://stackoverflow.com/questions/30524334
复制相似问题