MongoDB $and 연산자와 $gt 조건 활용하기
MongoDB의 $and 연산자는 하나 이상의 표현식으로 구성된 배열에 대해 논리적 AND 연산을 수행합니다. 즉, 배열 안의 모든 조건이 동시에 참일 때만 해당 문서를 조회 결과로 반환합니다.
이번 글에서는 $and 연산자 안에 $gt(보다 큼) 비교 연산자를 함께 사용하여 문서를 조회하는 방법을 알아보겠습니다.
1. 컬렉션 생성 및 문서 삽입
먼저 insertOne() 메서드를 사용해 데모 컬렉션에 문서를 생성하겠습니다.
> db.demo680.insertOne({Values:40});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea4461b04263e90dac943fe")
}
> db.demo680.insertOne({Values:70});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea4461e04263e90dac943ff")
}
> db.demo680.insertOne({Values:[80,30]});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea4462a04263e90dac94400")
}
> db.demo680.insertOne({Values:20});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ea4463304263e90dac94401")
}위 예제에서는 총 4개의 문서를 삽입했습니다. 특히 세 번째 문서는 Values 필드가 단일 값이 아닌 배열 [80, 30]으로 저장되어 있다는 점에 주목할 필요가 있습니다.
2. find() 메서드로 전체 문서 확인
find() 메서드를 사용하면 컬렉션의 모든 문서를 화면에 출력할 수 있습니다.
> db.demo680.find();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{ "_id" : ObjectId("5ea4461b04263e90dac943fe"), "Values" : 40 }
{ "_id" : ObjectId("5ea4461e04263e90dac943ff"), "Values" : 70 }
{ "_id" : ObjectId("5ea4462a04263e90dac94400"), "Values" : [ 80, 30 ] }
{ "_id" : ObjectId("5ea4463304263e90dac94401"), "Values" : 20 }3. $and 내부에서 $gt 조건 사용하기
이제 핵심인 $and 연산자 안에서 $gt 조건을 사용하는 쿼리를 살펴보겠습니다. 아래 쿼리는 Values 필드가 60보다 크면서 동시에 30이라는 값을 포함하고 있는 문서를 찾습니다.
> db.demo680.find({$and : [{Values:{$gt:60}}, {Values:30}]})실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5ea4462a04263e90dac94400"), "Values" : [ 80, 30 ] }결과 분석
조회 결과로 배열 [80, 30]을 가진 문서만 반환된 이유는 다음과 같습니다.
첫 번째 조건 — {Values: {$gt: 60}}: MongoDB는 배열 필드에 대해 요소 중 하나라도 조건을 만족하면 일치로 판단합니다. 배열 [80, 30]에는 80이라는 요소가 있어 60보다 크므로 이 조건을 충족합니다.
두 번째 조건 — {Values: 30}: 배열에 30이라는 요소가 포함되어 있으므로 역시 일치합니다.
두 조건을 모두 만족하는 유일한 문서가 바로 Values: [80, 30]인 문서입니다. 반면 70은 60보다 크지만 30을 포함하지 않고, 40과 20은 두 조건 중 어느 것도 완전히 충족하지 못해 결과에서 제외되었습니다.
이처럼 $and와 $gt를 조합하면 여러 조건을 동시에 적용한 정교한 데이터 조회가 가능하며, 배열 필드를 다룰 때도 각 요소별로 조건이 평가된다는 점을 기억해두면 유용합니다.