MongoDB 문서 유효성 검사란?
MongoDB는 스키마가 유연한 NoSQL 데이터베이스이지만, createCollection() 메서드에 validator 옵션을 지정하면 컬렉션 수준에서 문서의 구조와 필드 타입을 강제할 수 있습니다. 이를 통해 잘못된 형식의 데이터가 저장되는 것을 사전에 차단할 수 있습니다.
1. validator를 적용한 컬렉션 생성
다음 쿼리는 FirstName 필드가 반드시 존재하고 문자열(string) 타입이어야 한다는 조건을 가진 컬렉션을 생성합니다.
> db.createCollection("demo356", {validator: {
... $and: [ {"FirstName": {$type: "string", $exists: true}} ]
... }})
{ "ok" : 1 }2. 유효한 문서 삽입
조건을 만족하는 문서는 아무 문제 없이 정상적으로 저장됩니다.
> db.demo356.insertOne({"FirstName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e568d49f8647eb59e5620c7")
}3. 유효하지 않은 문서 삽입 시도
FirstName 필드에 문자열이 아닌 숫자를 넣으면 유효성 검사에 실패하며 에러가 발생합니다.
> db.demo356.insertOne({"FirstName":909});
WriteError({
"index" : 0,
"code" : 121,
"errmsg" : "Document failed validation",
"op" : {
"_id" : ObjectId("5e568d52f8647eb59e5620c8"),
"FirstName" : 909
}
})여기서 에러 코드 121(Document failed validation)은 해당 문서가 컬렉션에 설정된 유효성 검사 규칙을 통과하지 못했다는 의미입니다.
4. 저장된 문서 확인
find() 메서드로 컬렉션의 모든 문서를 조회하면, 유효성 검사를 통과한 문서만 저장되어 있는 것을 확인할 수 있습니다.
> db.demo356.find();
{ "_id" : ObjectId("5e568d49f8647eb59e5620c7"), "FirstName" : "Chris" }추가 팁
기존 컬렉션에는 collMod 명령으로 validator를 나중에 추가할 수 있습니다.
$jsonSchema 연산자를 사용하면 필수 필드, 타입, 범위 등 훨씬 더 정교한 스키마 검증이 가능합니다.
validationAction을 "error" 대신 "warn"으로 설정하면 검사 실패 시 삽입을 막는 대신 경고 로그만 남깁니다.