MongoDB - 重复条目进入集合

时间:2012-02-06 14:52:55

标签: php mongodb sharding

目前我们在生产服务器中使用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

如何解决此问题,请分享您的意见。

2 个答案:

答案 0 :(得分:1)

  

因为_id是一个独特的密钥怎么会这样?

Mongo不支持跨分片的唯一索引。它只能强制分片键本身(或包含分片键的键)的唯一性。

除非你在_id上进行分片,否则Mongo不能再保证它的唯一性(因为没有全局索引)。所以你必须自己在应用程序代码中处理它。

答案 1 :(得分:0)

在分片集合中,您无法更改文档的分片键值。这是不可改变的。否则,MongoDB必须做大量的工作才能将您的文档重新定位到一个新的适当位置。

更改分片键值的正确方法是插入具有新值的新文档并删除旧文档。