MongoDB에서 불리언(Boolean) 필드가 FALSE인 문서만 골라내고 싶을 때가 있습니다. 이 글에서는 예제 컬렉션을 만들고, $ne(not equal) 연산자를 활용해 FALSE 값만 조회하는 방법을 단계별로 살펴보겠습니다.
1. 예제 컬렉션 생성하기
먼저 isEnable이라는 불리언 필드(TRUE 또는 FALSE 값을 가짐)를 포함한 문서들로 컬렉션을 생성합니다. insertOne() 메서드를 사용해 문서를 하나씩 삽입합니다.
> db.translateDefinitionDemo.insertOne({"_id":10,"StudentName":"Larry","isEnable":true});
{ "acknowledged" : true, "insertedId" : 10 }
> db.translateDefinitionDemo.insertOne({"_id":20,"StudentName":"Chris","isEnable":false});
{ "acknowledged" : true, "insertedId" : 20 }
> db.translateDefinitionDemo.insertOne({"_id":30,"StudentName":"Robert","isEnable":true});
{ "acknowledged" : true, "insertedId" : 30 }
> db.translateDefinitionDemo.insertOne({"_id":40,"StudentName":"Sam","isEnable":false});
{ "acknowledged" : true, "insertedId" : 40 }
> db.translateDefinitionDemo.insertOne({"_id":50,"StudentName":"Mike","isEnable":true});
{ "acknowledged" : true, "insertedId" : 50 }2. 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 확인할 수 있습니다. 가독성을 높이기 위해 pretty() 메서드를 함께 사용합니다.
> db.translateDefinitionDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : 10, "StudentName" : "Larry", "isEnable" : true }
{ "_id" : 20, "StudentName" : "Chris", "isEnable" : false }
{ "_id" : 30, "StudentName" : "Robert", "isEnable" : true }
{ "_id" : 40, "StudentName" : "Sam", "isEnable" : false }
{ "_id" : 50, "StudentName" : "Mike", "isEnable" : true }3. FALSE 값만 조회하는 쿼리
이제 핵심 부분입니다. $in 연산자로 조회 범위를 지정하고, $ne(not equal) 연산자를 사용해 isEnable 필드가 true가 아닌 문서, 즉 FALSE 값만 필터링할 수 있습니다.
> db.translateDefinitionDemo.find({ "_id" : { "$in" : [10, 20, 30, 40, 50] }, "isEnable" : { "$ne" : true } }).pretty();실행 결과는 다음과 같습니다.
{ "_id" : 20, "StudentName" : "Chris", "isEnable" : false }
{ "_id" : 40, "StudentName" : "Sam", "isEnable" : false }추가 팁: 더 간단한 방법
사실 위 쿼리는 조건을 더 단순화할 수도 있습니다. 불리언 필드에 직접 false를 조건으로 지정하면 동일한 결과를 얻을 수 있습니다.
> db.translateDefinitionDemo.find({ "isEnable" : false }).pretty();다만 원본 예제처럼 $ne 연산자를 사용하면 false뿐 아니라 해당 필드가 아예 없거나 null, 다른 타입의 값인 문서까지 함께 조회된다는 점을 기억해 두면 좋습니다. 상황에 맞게 두 방식을 선택적으로 활용하세요.