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

MongoDB에서 배열 하위 요소를 쿼리하는 방법 – 위치 연산자 $ 활용 가이드

MongoDB에서 배열 내부의 특정 하위 요소(sub-element)만 조회하고 싶다면 위치 연산자(positional operator) $를 사용할 수 있습니다. 위치 연산자는 쿼리 조건에 일치하는 배열 요소만 프로젝션 결과에 포함시켜 주는 강력한 기능입니다.

1. 테스트용 컬렉션 생성하기

먼저 예제로 사용할 컬렉션을 만들고 문서를 삽입해 보겠습니다.

> db.subElementQueryingDemo.insertOne(
...    {
...       "ClientName":"Chris",
...       "Status": [ { "isMarried": true }, { "isMarried": false } ]
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5ccf28c9dceb9a92e6aa1953")
}

위 문서는 클라이언트 이름과 함께 Status라는 배열 필드를 가지며, 배열 안에는 각각 isMarried 값을 담은 두 개의 객체가 들어 있습니다.

2. find() 메서드로 전체 문서 확인하기

find() 메서드를 사용해 컬렉션의 모든 문서를 출력해 보겠습니다.

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

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

{
   "_id" : ObjectId("5ccf28c9dceb9a92e6aa1953"),
   "ClientName" : "Chris",
   "Status" : [
      {
         "isMarried" : true
      },
      {
         "isMarried" : false
      }
   ]
}

현재 Status 배열에는 isMarried: trueisMarried: false 두 개의 요소가 모두 포함되어 있습니다.

3. 위치 연산자 $로 하위 요소 쿼리하기

이제 위치 연산자 $를 활용해 조건에 맞는 배열 요소만 조회해 보겠습니다.

> db.subElementQueryingDemo.find({ "Status.isMarried": true }, {ClientName: 1, 'Status.$': 1}).pretty();

쿼리 구조를 살펴보면 다음과 같습니다.

  • 첫 번째 인수(쿼리 조건): { "Status.isMarried": true } – 배열 내에서 isMarriedtrue인 요소를 찾습니다.
  • 두 번째 인수(프로젝션): { ClientName: 1, 'Status.$': 1 }ClientName 필드와, 조건에 일치하는 첫 번째 배열 요소(Status.$)만 반환합니다.

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

{
   "_id" : ObjectId("5ccf28c9dceb9a92e6aa1953"),
   "ClientName" : "Chris",
   "Status" : [
      {
         "isMarried" : true
      }
   ]
}

핵심 정리

이처럼 MongoDB에서는 점 표기법(dot notation)으로 배열 내부의 하위 필드에 접근해 조건을 지정하고, 프로젝션 단계에서 위치 연산자 $를 사용하면 일치하는 배열 요소만 깔끔하게 추출할 수 있습니다. 전체 배열이 아닌 필요한 요소만 가져오고 싶을 때 매우 유용한 패턴이므로 꼭 기억해 두시기 바랍니다.