Computer >> 컴퓨터 >  >> 프로그래밍 >> MongoDB

MongoDB에서 내장 문서(해시) 필드에 $gt 연산자를 사용하는 방법

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에서는 점 표기법과 비교 연산자를 조합하여 중첩된 문서 구조 안의 데이터도 직관적으로 필터링할 수 있습니다.