MongoDB의 $gt는 'greater than(초과)'을 의미하는 비교 연산자입니다. 이 연산자를 사용하면 지정된 값보다 큰 값을 가진 필드를 포함하는 문서만 선택할 수 있습니다. 특히 내장 문서(embedded document, 해시) 형태로 저장된 데이터도 점 표기법(dot notation)을 활용하면 손쉽게 조건 검색이 가능합니다.
이 글에서는 실제 예제를 통해 내장 문서 안의 필드에 $gt 연산자를 적용하는 방법을 단계별로 살펴보겠습니다.
1. 예제용 컬렉션 생성
먼저 플레이어 정보를 담은 문서들을 삽입하여 컬렉션을 만들어 보겠습니다. 각 문서는 PlayerDetails라는 내장 문서 안에 PlayerScore(점수)와 PlayerLevel(레벨)을 포함하고 있습니다.
> db.performQueryDemo.insertOne({"PlayerDetails":{"PlayerScore":1000,"PlayerLevel":2},"PlayerName":"Chris"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7eba41a844af18acdffa9")
}
> db.performQueryDemo.insertOne({"PlayerDetails":{"PlayerScore":0,"PlayerLevel":1},"PlayerName":"Robert"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ebbb1a844af18acdffaa")
}
> db.performQueryDemo.insertOne({"PlayerDetails":{"PlayerScore":-10,"PlayerLevel":0},"PlayerName":"Larry"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ebd41a844af18acdffab")
}
> db.performQueryDemo.insertOne({"PlayerDetails":{"PlayerScore":1,"PlayerLevel":1},"PlayerName":"David"});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cd7ebe31a844af18acdffac")
}2. 저장된 전체 문서 확인하기
find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.
> db.performQueryDemo.find().pretty();
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
{
"_id" : ObjectId("5cd7eba41a844af18acdffa9"),
"PlayerDetails" : {
"PlayerScore" : 1000,
"PlayerLevel" : 2
},
"PlayerName" : "Chris"
}
{
"_id" : ObjectId("5cd7ebbb1a844af18acdffaa"),
"PlayerDetails" : {
"PlayerScore" : 0,
"PlayerLevel" : 1
},
"PlayerName" : "Robert"
}
{
"_id" : ObjectId("5cd7ebd41a844af18acdffab"),
"PlayerDetails" : {
"PlayerScore" : -10,
"PlayerLevel" : 0
},
"PlayerName" : "Larry"
}
{
"_id" : ObjectId("5cd7ebe31a844af18acdffac"),
"PlayerDetails" : {
"PlayerScore" : 1,
"PlayerLevel" : 1
},
"PlayerName" : "David"
}3. $gt 연산자로 내장 문서 필드 조회하기
이제 핵심 부분입니다. 내장 문서의 특정 필드에 $gt 연산자를 적용하려면 점 표기법으로 경로를 지정하면 됩니다. 여기서는 점수가 0보다 큰 플레이어의 기록만 조회해 보겠습니다.
> db.performQueryDemo.find({"PlayerDetails.PlayerScore":{$gt:0}});실행 결과는 다음과 같습니다.
{ "_id" : ObjectId("5cd7eba41a844af18acdffa9"), "PlayerDetails" : { "PlayerScore" : 1000, "PlayerLevel" : 2 }, "PlayerName" : "Chris" }
{ "_id" : ObjectId("5cd7ebe31a844af18acdffac"), "PlayerDetails" : { "PlayerScore" : 1, "PlayerLevel" : 1 }, "PlayerName" : "David" }결과 분석
출력 결과를 보면 네 명의 플레이어 중 Chris(1000점)와 David(1점)만 반환되었습니다. Robert는 점수가 정확히 0이고, Larry는 -10으로 0보다 작기 때문에 조건에서 제외된 것입니다. 즉, $gt는 지정한 값보다 엄격하게 초과하는 경우에만 매칭되며, 값이 같으면 포함되지 않습니다.
만약 '0 이상'인 값을 포함하고 싶다면 $gte(greater than or equal) 연산자를 사용하면 됩니다. 이처럼 MongoDB에서는 점 표기법과 비교 연산자를 조합하여 중첩된 문서 구조 안의 데이터도 직관적으로 필터링할 수 있습니다.