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

MongoDB에서 배열 내부의 필드를 비교해 문서를 쿼리하는 방법

MongoDB에서 배열(array) 내부의 필드 값을 비교하려면 $gt(초과)와 $lt(미만) 비교 연산자를 사용할 수 있습니다. 이 글에서는 예제를 통해 배열 필드를 조건으로 문서를 조회하는 방법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 insertOne() 메서드를 사용해 테스트용 컬렉션에 문서를 삽입합니다. 각 문서는 Details라는 배열 안에 여러 개의 Score 필드를 가지고 있습니다.

> db.demo147.insertOne({"Details":[{"Score":45},{"Score":46}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e32fa21fdf09dd6d08539be")
}
> db.demo147.insertOne({"Details":[{"Score":65},{"Score":86}]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e32fa40fdf09dd6d08539bf")
}

2. 저장된 전체 문서 확인하기

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

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

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

{
   "_id" : ObjectId("5e32fa21fdf09dd6d08539be"),
   "Details" : [
      {
         "Score" : 45
      },
      {
         "Score" : 46
      }
   ]
}
{
   "_id" : ObjectId("5e32fa40fdf09dd6d08539bf"),
   "Details" : [
      {
         "Score" : 65
      },
      {
         "Score" : 86
      }
   ]
}

3. 배열 필드 비교 쿼리 실행하기

이제 배열 내부의 Score 값이 45보다 크고 50보다 작은 문서를 조회해 보겠습니다. 점 표기법(Dot Notation)을 활용해 'Details.Score' 경로로 배열 내부의 필드에 접근합니다.

> db.demo147.find({ 'Details.Score': { $gt: 45, $lt: 50 }});

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

{ "_id" : ObjectId("5e32fa21fdf09dd6d08539be"), "Details" : [ { "Score" : 45 }, { "Score" : 46 } ] }

결과 분석

첫 번째 문서의 Details 배열에는 Score 값이 각각 45와 46인 요소가 들어 있습니다. MongoDB는 배열 요소 중 하나라도 주어진 조건($gt: 45, $lt: 50)을 만족하면 해당 문서를 결과에 포함시킵니다. 여기서는 Score가 46인 요소가 두 조건을 모두 충족하므로 첫 번째 문서만 반환되었습니다. 반면 두 번째 문서의 Score 값(65, 86)은 조건 범위를 벗어나기 때문에 조회되지 않습니다.

이처럼 점 표기법과 $gt, $lt 같은 비교 연산자를 조합하면 배열 내부의 특정 필드 값을 손쉽게 비교하여 원하는 문서만 정확하게 추출할 수 있습니다.