2016-12-17 1 views
0

문서가 다른 문서의 배열과 동일한 배열을 가질 수없는 데이터베이스 스키마를 만들고 싶습니다. 두 번째는 실패 할 수 있도록 어떻게이 유효성을 검사 할 수 있습니다, 지금은 같은 참가자들과이 대화를 만드는 경우몽구스 - 문서가 동일한 배열을 가질 수 없습니다.

var ConversationSchema = new Schema({ 
    name: String, 
    participants: { 
     type: [{ 
      type: Schema.Types.ObjectId, 
      ref: 'User' 
     }] 
    } 
}); 

하지만, 셋째하지 않습니다 : 그래서, 스키마 conversations이 있다고?

var conversation1 = new Conversation({ 
    name: "Hello", 
    participants: ['12345', '09876'] 
}); 

var conversation2 = new Conversation({ 
    name: "World", 
    participants: ['12345', '09876'] 
}); 

var conversation3 = new Conversation({ 
    name: "Group chat", 
    participants: ['12345', '09876', '13579'] 
}); 

conversation1.save(); // Valid 
conversation2.save(); // Invalid - conversation already exists 
conversation3.save(); // Valid 
+1

이것은 스키마 유효성 검사가 아닌 비즈니스 로직처럼 보입니다. –

답변

1

나는 당신이 당신의 데이터를 저장하기 전에 일부 사용자 지정 몽구스 검증을 사용할 수있는 것 같아요. 그러나 Kevin이 그의 코멘트에서 말했듯이 이것은 실제로 스키마와 다르지 않습니다. 기존의 배열과 새로운 배열을 비교하는 데이터베이스 쿼리를 작성해야하기 때문입니다. 이 같은
뭔가 (하지 테스트) : 지금은

function checkArray(arr) { 
// here make a call to the db to compare existing array with arr 
} 

var ConversationSchema = new Schema({ 
    name: String, 
    participants: { 
     type: [{ 
      type: Schema.Types.ObjectId, 
      ref: 'User', 
      validate: checkArray 
     }] 
    } 
}); 

아니 더 나은 아이디어.

+0

그럴지라도이 방법으로는 그렇게 할 수 있습니다. 감사 –

관련 문제