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

MongoDB에서 $eq, $not, $gt 연산자를 조합하여 배열 필드 값 쿼리하는 방법

MongoDB에서 연산자를 활용한 값 쿼리 방법

이 글에서는 MongoDB에서 $eq, $not, $gt 연산자를 조합하여 배열 필드 안에 있는 특정 값을 조회하는 방법을 단계별로 살펴보겠습니다. 예제를 통해 실제 쿼리 작성법과 실행 결과까지 함께 확인할 수 있습니다.

1단계: 샘플 컬렉션 생성하기

먼저 테스트에 사용할 문서들이 담긴 컬렉션을 생성합니다. 각 문서는 학생 ID(_id)와 여러 개의 점수(Score)를 담고 있는 ScoreDetails 배열로 구성되어 있습니다.

> db.queryMongoValueDemo.insertOne(
    {
       _id:101,
       "ScoreDetails":[{Score:80},{Score:45},{Score:25},{Score:70}]
    }
);
{ "acknowledged" : true, "insertedId" : 101 }
> db.queryMongoValueDemo.insertOne(
    {
       _id:102,
       "ScoreDetails":[{Score:80},{Score:24},{Score:34}]
    }
);
{ "acknowledged" : true, "insertedId" : 102 }
> db.queryMongoValueDemo.insertOne(
    {
       _id:103,
       "ScoreDetails":[{Score:99},{Score:95}]
    }  
);
{ "acknowledged" : true, "insertedId" : 103 }

2단계: find() 메서드로 전체 문서 확인하기

find() 메서드를 사용하면 컬렉션에 저장된 모든 문서를 조회할 수 있습니다.

> db.queryMongoValueDemo.find().pretty();

위 명령을 실행하면 다음과 같은 결과가 출력됩니다.

{
   "_id" : 101,
   "ScoreDetails" : [
      {
         "Score" : 80
      },
      {
         "Score" : 45
      },
      {
         "Score" : 25
      },
      {
         "Score" : 70
      }
   ]
}
{
   "_id" : 102,
   "ScoreDetails" : [
      {
         "Score" : 80
      },
      {
         "Score" : 24
      },
      {
         "Score" : 34
      }
   ]
}
{
   "_id" : 103,
   "ScoreDetails" : [
      {
         "Score" : 99
      },
      {
         "Score" : 95
      }
   ]
}

3단계: $eq와 $not, $gt 연산자로 조건 쿼리 실행하기

이제 핵심 쿼리를 살펴보겠습니다. 아래 쿼리는 배열 안에 정확히 80점인 값이 존재하고($eq), 동시에 80보다 큰 값은 하나도 없어야 하는($not + $gt) 문서만 찾습니다.

> db.queryMongoValueDemo.find({
   "ScoreDetails.Score": {
      "$eq": 80,
      "$not": { "$gt": 80 }
   }
});

실행 결과는 다음과 같습니다.

{ "_id" : 101, "ScoreDetails" : [ { "Score" : 80 }, { "Score" : 45 }, { "Score" : 25 }, { "Score" : 70 } ] }
{ "_id" : 102, "ScoreDetails" : [ { "Score" : 80 }, { "Score" : 24 }, { "Score" : 34 } ] }

결과 분석

쿼리 결과로 _id가 101과 102인 문서 두 개만 반환되었습니다. 그 이유는 다음과 같습니다.

  • _id 101, 102: 두 문서 모두 80점이 포함되어 있고($eq: 80 충족), 80보다 큰 점수가 없으므로($not: { $gt: 80 } 충족) 조건에 해당합니다.
  • _id 103: 99점과 95점처럼 80보다 큰 값이 존재하기 때문에 $not 조건에 걸려 결과에서 제외됩니다.

이처럼 MongoDB에서는 비교 연산자와 논리 부정 연산자를 조합하면 배열 필드 내부의 복잡한 조건도 간결하게 처리할 수 있습니다.