2012-02-06 81 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將不得不做很多工作將文檔重新定位到一個新的適當位置。

更改分片鍵值的正確方法是插入具有新值的新文檔並刪除舊文檔。