2014-02-05 2 views
1

나는 findAndModify을 사용하고 있습니다. 내가 username : 100, Doubleusername에서 Schema 변화를 삽입하면 MongoDb에서 업데이트하기 전에 데이터를 확인하십시오

내 스키마

var userSchema = new mongoose.Schema({ 
    _id    : ObjectId, 
    username   : String, 
}, { 
    safe    : true 
}); 

입니다.

업데이트 전 요소를 확인하고 usernameString 인 경우에만 업데이트 할 수 있습니까?

+0

여기 정확히 무엇을 묻고 있습니까? 왜'username : 100'을 허용합니까? 'username : "100"'을 보장하지 않는 이유는 무엇입니까? 당신의 질문은 몽고와 어떻게 관련이 있습니까? – mnemosyn

+0

값이 100이면 스키마를 업데이트하면 안됩니다. 업데이트 전 값을 확인할 수 있습니까 ?? int가 아닌 문자열인지 확인할 수 있습니까? mongoDb에는 함수가 있습니까? – Twinsen

+0

코드에서 간단히 그렇게하지 않는 이유는 무엇입니까? ** schemaless ** 데이터베이스가 어떻게 그렇게 할 수 있습니까? 나는 여전히 이것이 당신의 스키마를 어떻게 바꿀 수 있는지 보지 못하지만 당신의 스키마와 일치하지 않는 문서를 삽입 할 수있다. 이를 방지하려면 개체의 형식이 올바른지 확인하십시오. 자바 스크립트 형식 변환,'instanceof' 등을 읽고 JS에서 그렇게하는 법을 배워보십시오. – mnemosyn

답변

3

단순한 '도우미'인 몽구스에 속지 마십시오 (내 생각에 혼란이 가중되지만).

MongoDB를 단독으로 이해하는 것이 중요합니다. MongoDB에는 스키마가 없습니다. 을 사용하기 전에 컬렉션을 신고 할 필요가 없습니다. 새롭게 시작된 mongodb에서 첫 번째 명령 : db.bla.insert({"Name":"john"});이 작동합니다. 그런 다음 이 완전히 다른 경우에도 db.bla.insert({"xf":1456});이 작동합니다. 첫 번째 문서의입니다.

따라서 MongoDB는 일종의 스키마에 따라 개체의 유효성을 검사 할 수 없으며이를 수행 할 필요가 없습니다. 문제는 코드가이를 처리 할 수 ​​있는지 여부입니다. 대부분의 경우 엄격한 스키마를 갖는 것이 좋습니다. 이 경우 Mongoose offers a helper, doc.validate()을 사용한다고해도 스키마 실행은 응용 프로그램 코드에 의해 수행되어야합니다.

+1

감사합니다. – Twinsen

관련 문제