티스토리 뷰

반응형

MongoDB와 같은 NoSQL의 최대 장점이자 단점은  Schema-Free입니다. 

즉 데이터를 넣을 공간을 미리정의할 필요가 없다는 것이죠.

그래서 도큐먼트마다 필드의 갯수나 타입도 다양하게 저장해서 활용할 수 있습니다.

스키마가 없으니 데이터를 저장할 때 편하지만, 개발자 실수로 원하지 않은 도큐먼트가

추가되는 일이 흔히 발생합니다.

MongoDB에서는 RDBMS의 제약조건과 비슷한 기능으로 이런 단점을 보완할 수 있습니다.

"collMod" 명령으로 컬렉션에 유효성을 추가할 수 있는데, "collMod"는 'dbAdmin' 역할이 필요합니다.


해당 데이터베이스 유저중 하나에 'dbAdmin' 역할(role)를 부여하고, 그 계정으로 접속한 다음에

유효성을 추가하면 됩니다.

예시로 member라는 컬렉션에 no라는 필드가 반드시 존재해야 한다는 유효성을 추가해 보겠습니다.

db.runCommand(

{

collMod:"member",

validator:{no:{$exists:true}},

validationLevel:"strict",

validationAction:"error"

}

)


<<TEST>>

db.member.insert( {nm:'홍길동', gender:'남'}) ;

위와 같이 도큐먼트를 추가하려고 하면, no 필드가 존재하지 않기 때문에

도큐먼트는 추가되지 않고 에러가 발생합니다.


<< 경험>>

저는 주요 컬렉션에 Primary Key에 해당하는 필드에는 존재 유무를 체크하는 유효성을, 계산 값에 사용되는 특정 필드 (ex. 가격, 수수료)에는  데이터 타입(int, double) 유효성 체크를 설정함으로써 유효하지 않은 도큐먼트가 컬렉션에 추가되는 것을 방지하고 있습니다. 


반응형