2016-12-01 14 views
0

아래의 언급 된 mongo 컬렉션의 scorecardList.filename 필드에 고유 인덱스를 만들려고합니다. 목적은 동일한 파일 이름으로 scorecardList에 다른 요소를 만들 수 없어야한다는 것입니다.Mongo DB 컬렉션의 임베디드 배열에 고유 인덱스를 추가하는 방법

몽고 스키마

{ 
    "Name": "Ravikant Khond", 
    "PIN" : "411057", 
    "scorecardList": [ 
     { 
      "fileName" : "ScoreCard_April_2016.pdf", 
      "runDate" : ISODate("2016-05-01T00:00:00.000Z"), 
      "month" : "April", 
      "year" : "2016" 
     }, 
     { 
      "fileName" : "ScoreCard_May_2016.pdf", 
      "runDate" : ISODate("2016-06-01T00:00:00.000Z"), 
      "month" : "May", 
      "year" : "2016" 
     } 
    ] 
} 

[1] I 고유 인덱스를 생성하는 동안 다음과 같이 사용하려고

몽고 명령 : 인덱스 I 작성된

db.testing.createIndex(
    { "scorecardList.filename": 1 }, 
    { 
     unique: true, 
     partialFilterExpression: { 
      "scorecardList.filename": { $exists: true } 
     } 
    } 
); 

비록 기존 파일 이름이있는 스코어 카드를 추가 할 수 있습니다.

도와주세요.

+0

샘플 문서에는 scorecardList.fileName의 대문자 'N'이 표시됩니다. 그리고 색인은 파일 이름에 소문자 'n'을 사용하여 색인을 생성합니다. – dyouberg

답변

-1
는 지금까지 내가, 고유 인덱스는 서로 다른 문서간에 고유성을 알고

을 배열 할 때 당신이 완전한 고유성을 적용 할 수

, 그래서 이것은 중복 키 오류가 던질 것이다 :

db.food.insert({ id: 123, name:bread, ingredients: [ { id: 456 } ] }) 
db.food.insert({ id: 123, name:bread, ingredients: [ { id: 456 } ] }) 

을하지만, 이 허용됩니다 :

db.food.insert({ id: 123, name:bread, ingredients: [ { id: 456 }, { id: 456 } ] }) 

내가 어떤 식 으로든, 당신은 몽고 수준에서 필요로하는 제약 조건을 강제가 있는지 확실하지 않다 어쩌면 당신이 확인할 수있는 일이다 업데이트를 삽입 할 때 응용 프로그램 논리에?

alternatively, using the $addToSet function would check if the value already exists before adding it.