상황 : 동일한 컬렉션 (계정)의 문서가 여러 개 있는데 각각 uniquestrings이라는 array (문자열) 유형의 속성이 있습니다.하나의 컬렉션에있는 모든 문서에 대해 고유 한 값을 가진 배열
문제점 : uniquestrings의 각 항목은 mongodb의 모든 문서에서 고유해야합니다. MongoDB/Mongoose는 이러한 유효성 검사 (addToSet¹도 색인도 제공하지 않습니다 : {unique : true} ²가 문제를 해결하지 못함)를 제공하는 것 같습니다. mongodb 자체에서 유효성을 검사 할 수 있도록 내 문서 스키마를 재구성하는 패턴이 있습니까? 현재 문서를 업데이트하기 전에 소프트웨어 자체에서 확인합니다.
예.
account {
_id: 111,
uniquestrings: ["a", "b", "c"]
}
account {
_id: 222,
uniquestrings: ["d", "e", "f"]
}
예 : mongo에서 중복 오류가 발생하여 account(222).uniquestrings.push("a");
을 방지하십시오.
추가 예 :
배열 고유성을 ¹하는 배열의 각 항목이 수집 걸쳐갱신 1 고유해야
² 충분하지 않다. 영향을받는 스키마 항목은 다음과 같습니다.
var Account = new Schema({
...
uniquestrings: [{type: String, index: {unique: true}}]
...
});
이제 4 개의 계정 문서를 만들 때. 나는 단지 1과 2가 좋기를 바랄 뿐이다. 그리고 나머지는 실패해야한다.
var accountModel1 = new Account.Model({uniquestrings: ["a", "b"]});
accountModel1.save(); // OK
var accountModel2 = new Account.Model({uniquestrings: ["c", "d"]});
accountModel2.save(); // OK
var accountModel3 = new Account.Model({uniquestrings: ["c", "d"]});
accountModel3.save(); // FAIL => Not unique, so far so good
var accountModel4 = new Account.Model({uniquestrings: ["X", "d"]});
accountModel4.save(); // OK => But i Want this to faile because "d" is alreay in use.
문제가 어디에서 발생하는지 이해할 수 없습니다 ... 방금 테스트를 수행했으며 고유 인덱스 (mongo 셸 사용)로 제대로 작동합니다. 문제가있는 js 코드를 게시 할 수 있습니까? – felix
색인을 어떻게 만들었습니까? – styvane