2016-07-04 7 views
2

먼저 'items.barcode' 필드에 고유 인덱스를 추가하십시오.MongoDB의 임베드 문서에서 배열 유형 필드에 고유 인덱스 추가

db.clothes.createIndex({'items.barcode': 1}, {unique: 1}); 

그런 다음 clothes 테이블에 일부 문서를 삽입하십시오.

'E11000 duplicate key error index: duolayimeng.clothes1.$items.barcode_1 dup key: { : "122" }'

그러나 1 문서의 두 삽입 문서의

, 'barcode' 필드의 3 개 요소 '122'입니다있다 :
db.clothes1.remove({}); 
db.clothes.insert([ 
    { // success 
     _id: '1', 
     items: [ 
      {barcode: ['122', '122']}, 
      {barcode: ['122', '124']} 
     ] 
    }, 
    { // success 
     _id: '2', 
     items: [ 
      {barcode: ['222', '223']}, 
      {barcode: ['224', '225']} 
     ] 
    }, 
    { // failed 
     _id: '3', 
     items: [ 
      {barcode: ['122', '323']}, 
      {barcode: ['324', '325']} 
     ] 
    } 
]); 

이제 우리는 오류가 발생, 3 문서가 실패 삽입 볼 수 있습니다.


나는이 상황에 대해 당혹 스럽다. MongoDB가 'items.barcode'과 같은 임베드 문서의 배열 유형 필드를 결정하는 방식은 고유한가요?

답변

0

색인은 컬렉션 문서에서 고유하기 때문입니다.

하위 문서는 실제로 문서가 아니며 문서에 고유 한 필드가 있어야하며 하위 문서는 문서 내에서 고유해야합니다.

동일한 고유 키를 갖는 다른 문서가 이미 존재하므로 ID가 3 인 문서가 실패했습니다.

동일한 고유 필드가있는 다른 문서가 없으므로 ID가 1 인 문서가 삽입됩니다. 당신은 문서 내에서 고유성을 달성 할 때

, 당신은 클라이언트 측에서 그것을 구현하거나 스키마를 수정하고 $addToSet

0

The unique index permits the insertion of the following document into the collection if no other document in the collection has the a.b value of 5:

다음
db.collection.insert({ a: [ { b: 5 }, { b: 5 } ] }) 

doc

이다 사용하여 일련의 내부에 값을 추가해야합니다
관련 문제