[MONGODB] 이 개 필드를 사용하여 몽구스 지정 유효성 검사
MONGODB이 개 필드를 사용하여 몽구스 지정 유효성 검사
나는 endDate가이 startDate를보다 큰 경우 확인하려면 몽구스 지정 유효성 검사를 사용하고 싶습니다. 어떻게 startDate를 값을 액세스 할 수 있습니까? this.startDate를 사용하는 경우, 작동하지 않습니다; 나는 정의되지 않은 얻을.
var a = new Schema({
startDate: Date,
endDate: Date
});
var A = mongoose.model('A', a);
A.schema.path('endDate').validate(function (value) {
return diff(this.startDate, value) >= 0;
}, 'End Date must be greater than Start Date');
사랑하는 두 날짜를 비교하는 기능입니다.
해결법
-
==============================
1.당신은 부모 개체에 날짜 스탬프를 중첩 시도하고 부모를 확인할 수 있습니다. 같은 예를 들어 뭔가 :
당신은 부모 개체에 날짜 스탬프를 중첩 시도하고 부모를 확인할 수 있습니다. 같은 예를 들어 뭔가 :
//create a simple object defining your dates var dateStampSchema = { startDate: {type:Date}, endDate: {type:Date} }; //validation function function checkDates(value) { return value.endDate < value.startDate; } //now pass in the dateStampSchema object as the type for a schema field var schema = new Schema({ dateInfo: {type:dateStampSchema, validate:checkDates} });
-
==============================
2.당신은 몽구스 '검증'을 사용하면 모든 필드에 액세스 할 수 있도록 미들웨어 것을 할 수 있습니다 :
당신은 몽구스 '검증'을 사용하면 모든 필드에 액세스 할 수 있도록 미들웨어 것을 할 수 있습니다 :
ASchema.pre('validate', function(next) { if (this.startDate > this.endDate) { next(new Error('End Date must be greater than Start Date')); } else { next(); } });
검증 실패를보고 옆에 호출 할 때 자바 스크립트 오류 개체에서 유효성 검사 오류 메시지를 포장해야합니다.
-
==============================
3.원래의 질문에 대한 허용 대답에 대한 대안은 다음과 같습니다
원래의 질문에 대한 허용 대답에 대한 대안은 다음과 같습니다
var에 몽구스 =은 ( '몽구스')를 필요 스키마 mongoose.Schema를 =; // 스키마 정의 var에 ASchema 새로운 스키마 ({= STARTDATE : { 입력 : 날짜, 필수 : 사실 }, 종료 날짜 : { 입력 : 날짜, 필수 : 사실, 유효성 검사 : [나 DateValidator, '시작 날짜는 덜 종료 날짜보다 길어야'] } }); // STARTDATE를 및 검증 기능 endDate가 함수 나 DateValidator (값) { //`this`은 몽구스 문서입니다 창 this.startDate <= 값; }
-
==============================
4.나는 this.invalidate을 활용하여 @JohnnyHK (감사합니다)에서 고체 대답에 확장하고 싶었 :
나는 this.invalidate을 활용하여 @JohnnyHK (감사합니다)에서 고체 대답에 확장하고 싶었 :
Schema.pre('validate', function (next) { if (this.startDate > this.endDate) { this.invalidate('startDate', 'Start date must be less than end date.', this.startDate); } next(); });
이것은 mongoose.Error.ValidationError 오류 내부의 유효성 검사 오류를 모두 유지합니다. 표준화 된 오류 처리기를 유지하는 데 도움이됩니다. 희망이 도움이됩니다.
-
==============================
5.발리에서 '이'를 사용하는 것은 나를 위해 작동 -이 경우에 나는 내가 계산에서 제외 할 수 있도록 현재 오브젝트의 ID에 액세스해야하는 이메일 주소의 고유성을 검사 할 때 :
발리에서 '이'를 사용하는 것은 나를 위해 작동 -이 경우에 나는 내가 계산에서 제외 할 수 있도록 현재 오브젝트의 ID에 액세스해야하는 이메일 주소의 고유성을 검사 할 때 :
var userSchema = new mongoose.Schema({ id: String, name: { type: String, required: true}, email: { type: String, index: { unique: true, dropDups: true }, validate: [ { validator: validator.isEmail, msg: 'invalid email address'}, { validator: isEmailUnique, msg: 'Email already exists'} ]}, facebookId: String, googleId: String, admin: Boolean }); function isEmailUnique(value, done) { if (value) { mongoose.models['users'].count({ _id: {'$ne': this._id }, email: value }, function (err, count) { if (err) { return done(err); } // If `count` is greater than zero, "invalidate" done(!count); }); } }
-
==============================
6.이것은 (힌트에 대한 @shakinfree 덕분에) 사용되는 솔루션 I입니다 :
이것은 (힌트에 대한 @shakinfree 덕분에) 사용되는 솔루션 I입니다 :
var mongoose = require('mongoose'), Schema = mongoose.Schema; // schema definition var ASchema = new Schema({ dateSchema : { type:{ startDate:{type:Date, required: true}, endDate:{type:Date, required: true} }, required: true, validate: [dateValidator, 'Start Date must be less than End Date'] } }); // function that validate the startDate and endDate function dateValidator (value) { return value.startDate <= value.endDate; } module.exports = mongoose.model('A', ASchema);
from https://stackoverflow.com/questions/23760253/mongoose-custom-validation-using-2-fields by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB를 닷넷 드라이버 2.0 풀 (제거 요소) (0) | 2019.12.08 |
---|---|
[MONGODB] 쿼리에서 MongoDB를 $에 대한 응답의 순서? [복제] (0) | 2019.12.08 |
[MONGODB] 몽구스를 사용하여 MongoDB의 문서에서 키를 삭제 (0) | 2019.12.08 |
[MONGODB] MongoDB를 접두사 와일드 카드 : 전체 텍스트 검색 ($ 텍스트) 검색 문자열 부분을 찾아 (0) | 2019.12.08 |
[MONGODB] MongoDB의에서 "그룹화"와 최대 ()를 선택합니다 (0) | 2019.12.08 |