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

MongoDB에서 $elemMatch 연산자로 배열 요소 일치시키는 방법

MongoDB에서 $elemMatch 연산자는 배열 내 요소 중 지정된 조건을 모두 만족하는 문서를 조회할 때 사용됩니다. 이 글에서는 실제 예제를 통해 $elemMatch를 활용해 특정 조건에 맞는 문서를 일치시키는 방법을 알아보겠습니다.

1. 샘플 컬렉션 생성

먼저 문서가 포함된 컬렉션을 생성해 보겠습니다. insertOne() 메서드를 사용하여 세 개의 문서를 순차적으로 삽입합니다.

> db.demo313.insertOne({"_id":100,"details":[{"Name":"Chris","Age":24}]});
{ "acknowledged" : true, "insertedId" : 100 }
> db.demo313.insertOne({"_id":101,"details":[{"Name":"David","Age":22}]});
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo313.insertOne({"_id":102,"details":[{"Name":"Mike","Age":25}]});
{ "acknowledged" : true, "insertedId" : 102 }

각 문서는 _id 필드와 함께 details라는 배열 필드를 가지고 있으며, 배열 안에는 Name과 Age 정보를 담은 객체가 들어 있습니다.

2. 전체 문서 조회하기

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

> db.demo313.find();

위 쿼리를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

{ "_id" : 100, "details" : [ { "Name" : "Chris", "Age" : 24 } ] }
{ "_id" : 101, "details" : [ { "Name" : "David", "Age" : 22 } ] }
{ "_id" : 102, "details" : [ { "Name" : "Mike", "Age" : 25 } ] }

3. $elemMatch로 문서 일치시키기

이제 $elemMatch 연산자를 사용하여 Age 값이 22인 요소를 포함하는 문서를 조회해 보겠습니다. 첫 번째 인수에는 검색 조건(_id: 101)을, 두 번째 인수에는 프로젝션으로 $elemMatch 조건을 지정합니다.

db.demo313.find({_id:101},{details: { $elemMatch: { Age: 22 } } } );

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

{ "_id" : 101, "details" : [ { "Name" : "David", "Age" : 22 } ] }

$elemMatch의 주요 특징

  • 단일 요소 반환: $elemMatch는 조건과 일치하는 배열의 요소만 반환합니다. 위 예제에서도 Age가 22인 객체만 출력되었습니다.
  • 복합 조건 처리: 하나의 배열 요소가 여러 조건을 동시에 만족해야 할 때 유용합니다. 예를 들어 { $elemMatch: { Name: "David", Age: 22 } }처럼 여러 필드 조건을 결합할 수 있습니다.
  • 프로젝션 용도: 위 예제처럼 프로젝션 단계에서 사용하면 일치하는 배열 요소만 선택적으로 가져올 수 있어 응답 크기를 줄일 수 있습니다.

이처럼 $elemMatch는 배열 필드를 다루는 MongoDB 쿼리에서 정확하고 효율적인 데이터 조회를 가능하게 해주는 강력한 도구입니다.