2012-03-14 16 views
1

mongodbでは、独自の値を_idフィールドに割り当てることができ、 "_id"フィールドの値は、 - docsより。mongodb "_id"フィールドに重複した値が挿入されました

しかし、私のライブデータベースで、私は次のようにいくつかのレコードが重複して見ることができ、上記のレコードに

db.memberrecords.find().limit(2).forEach(printjson) 
{ 
     "_id" : "999783", 
     "Memberid" : "999783", 
     "Name" : "ASHEESH SHARMA", 
     "Gender" : "M", 
} 
{ 
     "_id" : "999783", 
     "Memberid" : "999783", 
     "Name" : "Sanwal Singh Meena", 
     "Gender" : "M", 
} 

、テーブルに二度挿入同じ_id値。私は、ローカル・データベースでテストする場合には、同じ_idレコードを挿入することができず、次のようにエラーを投げ、

以下
E11000 duplicate key error index: mongoms.memberrecords.$_id_ dup key: { : "999783" } 

db.memberrecords.getIndexes() 
[ 
     { 
       "name" : "_id_", 
       "ns" : "mongoms.memberrecords", 
       "key" : { 
         "_id" : 1 
       }, 
       "v" : 0 
     }, 
     { 
       "_id" : ObjectId("4f0bcdf2b1513267f4ac227c"), 
       "ns" : "mongoms.memberrecords", 
       "key" : { 
         "Memberid" : 1 
       }, 
       "name" : "Memberid_1", 
       "unique" : true, 
       "v" : 0 
     } 
] 
、(ご参考)私のライブmemberrecordsテーブルのインデックスであります

注:私はこのテーブルのために2つのシャーディングを持っています。

この上の任意の提案、

答えて

1

は_idフィールドあなたのシャードキーですしてください? 1つのクラスタに1つのユニークなインデックス(シャード・キー)を適用することができます(そうしないと、サーバーは挿入物ごとにすべてのシャードでチェックする必要があります)。

So:単一のシャードでは、_idは一意になります。ただし、あなたのシャードキーでない場合、すべてのベットは複数のシャード間でオフになっています。

http://www.mongodb.org/display/DOCS/Sharding+Limits#ShardingLimits-UniqueIndexesDOCS%3AIndexes%23UniqueIndexesを参照してください。

+0

私はmongoを検索するためにphpを使用しています。だから、重複挿入を避けるために、私はレコードを挿入する前に選択クエリを行うコードを変更する必要があり、レコードが利用可能な場合、私はレコードを更新する必要があります。 重複挿入を避けるための簡素化/回避策はありますか? – Raja

+0

シャードキーとして一意にする必要があるフィールドを使用します。 – kristina

関連する問題