2012-03-14 2 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 값이 테이블에 두 번 삽입했다. 내가 로컬 데이터베이스 테스트 때 다음과 같이 아래

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

이 (참조 용) 내 라이브 memberrecords 테이블에 대한 인덱스이며, 같은 _id 기록 및 던지는 오류를 삽입 허용하지 않습니다

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 
     } 
] 

참고 :이 테이블에는 두 개의 샤딩이 있습니다. 이 제발

어떤 제안,

답변

1

은 샤드 키 _id 필드인가? 클러스터 전체에 하나의 고유 인덱스 (샤드 키) 만 적용 할 수 있습니다 (그렇지 않으면 서버는 모든 삽입에 대해 모든 샤드를 확인해야합니다).

그래서 : 하나의 샤드에서 _id는 고유합니다. 그러나 샤드 키가 아닌 경우 모든 배트가 여러 샤드에서 벗어납니다.

http://www.mongodb.org/display/DOCS/Sharding+Limits#ShardingLimits-UniqueIndexesDOCS%3AIndexes%23UniqueIndexes을 참조하십시오.

+0

나는 php를 사용하여 mongo를 쿼리합니다. 그래서 중복 삽입을 피하기 위해, 나는 레코드를 삽입하기 전에 select 쿼리를 할 코드를 변경해야하고 레코드가 사용 가능하다면 레코드를 업데이트해야합니다. 중복 삽입을 피할 수있는 단순화/해결 방법이 있습니까? – Raja

+0

샤드 키로 유일해야하는 필드를 사용하십시오. – kristina