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

MongoDB에서 $elemMatch로 배열 내 일치하는 문서 조회하기

MongoDB 배열 내에서 조건에 맞는 문서 찾기

MongoDB에서 배열 필드 안에 포함된 하위 문서(sub-document) 중 특정 조건과 일치하는 요소를 검색하려면 $elemMatch 연산자를 사용하면 됩니다. $elemMatch는 배열 내 각 요소가 지정한 모든 쿼리 조건을 동시에 만족하는지 확인할 때 유용합니다.

이번 글에서는 실제 예제를 통해 $elemMatch의 사용법을 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성

먼저 테스트용 컬렉션을 만들고 문서를 삽입합니다. 아래 예제에서는 사용자 정보를 배열 형태로 담은 문서 두 개를 생성했습니다.

> db.getMatchingDocumentDemo.insertOne(
    {
       _id : 1,
       "UserDetails" : [
          {
             "UserName" : "John",
             "UserAge" : 23
          }
       ]
    }
);
{ "acknowledged" : true, "insertedId" : 1 }

> db.getMatchingDocumentDemo.insertOne(
    { _id : 2, "UserDetails" : [ { "UserName" : "Larry", "UserAge" : 24 } ] }
);
{ "acknowledged" : true, "insertedId" : 2 }

두 개의 문서가 성공적으로 삽입되었습니다.

2. 전체 문서 확인하기

find() 메서드를 사용해 컬렉션에 저장된 모든 문서를 조회해 보겠습니다.

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

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

{
   "_id" : 1,
   "UserDetails" : [
      {
         "UserName" : "John",
         "UserAge" : 23
      }
   ]
}
{
   "_id" : 2,
   "UserDetails" : [
      {
         "UserName" : "Larry",
         "UserAge" : 24
      }
   ]
}

3. $elemMatch로 배열 내 일치하는 문서 조회

이제 본격적으로 $elemMatch 연산자를 사용해 배열 내부에서 조건에 맞는 문서를 조회해 보겠습니다. 여기서는 UserAge가 24인 사용자를 찾는 쿼리입니다.

> db.getMatchingDocumentDemo.find({ UserDetails: { $elemMatch: { UserAge: 24 } } });

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

{ "_id" : 2, "UserDetails" : [ { "UserName" : "Larry", "UserAge" : 24 } ] }

정리

$elemMatch를 사용하면 배열 안의 여러 필드 조건을 하나의 요소에 대해 동시에 검사할 수 있습니다. 예를 들어 UserName과 UserAge처럼 서로 다른 조건을 조합할 때도 일반 쿼리와 달리 같은 배열 요소 내에서만 매칭되도록 보장해 주므로, 정확한 문서 검색에 매우 유용합니다.