2012-02-06 122 views
0

当前我们在生产服务器中使用mongodb分片,并使用一个名为“ordertracking”的集合并使用以下命令创建shardkey。MongoDB - 重复项目集合

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

你的插入和更新命令是什么样的? – Barrie 2012-02-06 20:40:45

回答

1

因为_id是一个独特的关键是怎么来的呢?

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

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

0

在分片集合中,不能更改文档的分片键值。它是不可变的。否则,MongoDB将不得不做很多工作将文档重新定位到一个新的适当位置。

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