目前我们在生产服务器中使用mongodb分片,并有一个名为“ordertracking”的集合,并使用以下命令创建了shardkey。
db.runCommand( { shardcollection : "OT.ordertracking", key : {OrderId : 1} } )
在这个集合“_id”中,我们也插入了我们在OrderId字段中更新的相同orderid。但是此集合中出现了重复条目。但我们不知道它有可能吗?因为_id是一个独特的密钥怎么会这样?
收集架构详细信息以及参考文献的重复条目详细信息。
_id,OrderId,Name,City,State,Country
12,12,sara,38,12,201
12,12,sara,34,12,201
18,12,sara,32,12,201
18,12,sara,28,12,201
如何解决此问题,请分享您的意见。
答案 0 :(得分:1)
因为_id是一个独特的密钥怎么会这样?
Mongo不支持跨分片的唯一索引。它只能强制分片键本身(或包含分片键的键)的唯一性。
除非你在_id上进行分片,否则Mongo不能再保证它的唯一性(因为没有全局索引)。所以你必须自己在应用程序代码中处理它。
答案 1 :(得分:0)
在分片集合中,您无法更改文档的分片键值。这是不可改变的。否则,MongoDB必须做大量的工作才能将您的文档重新定位到一个新的适当位置。
更改分片键值的正确方法是插入具有新值的新文档并删除旧文档。