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

MongoDB에서 배열의 모든 요소를 포함하는 문서 필터링하기 – $all 연산자 완벽 가이드

MongoDB $all 연산자로 문서 필터링하기

MongoDB에서 특정 배열 필드가 지정한 모든 값을 포함하고 있는지 확인하여 문서를 조회해야 하는 경우가 있습니다. 예를 들어, 여러 과목 목록 중에서 'C++', 'PL/SQL', 'MongoDB' 세 과목을 모두 포함한 문서만 찾고 싶다면 어떻게 해야 할까요?

이럴 때 사용하는 것이 바로 $all 연산자입니다. $all은 지정한 배열의 모든 요소를 포함하는 문서만 정확하게 찾아줍니다.

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

먼저 실습을 위해 샘플 문서들이 담긴 컬렉션을 생성해 보겠습니다.

> db.demo17.insertOne({"ListOfSubject":["MySQL","MongoDB","Java"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e13847255d0fc6657d21f0a")
}
> db.demo17.insertOne({"ListOfSubject":["C","Python","Java"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e13847e55d0fc6657d21f0b")
}
> db.demo17.insertOne({"ListOfSubject":["C++","MongoDB","PL/SQL"]});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e13849255d0fc6657d21f0c")
}

위 명령으로 세 개의 문서가 삽입되었습니다. 각 문서는 서로 다른 과목 조합을 가진 ListOfSubject 배열 필드를 포함하고 있습니다.

2. 전체 문서 조회하기

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

> db.demo17.find();

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

{ "_id" : ObjectId("5e13847255d0fc6657d21f0a"), "ListOfSubject" : [ "MySQL", "MongoDB", "Java" ] }
{ "_id" : ObjectId("5e13847e55d0fc6657d21f0b"), "ListOfSubject" : [ "C", "Python", "Java" ] }
{ "_id" : ObjectId("5e13849255d0fc6657d21f0c"), "ListOfSubject" : [ "C++", "MongoDB", "PL/SQL" ] }

3. $all 연산자로 원하는 문서만 필터링하기

이제 핵심 단계입니다. $all 연산자를 사용하여 'C++', 'PL/SQL', 'MongoDB' 세 요소를 모두 포함한 문서만 조회해 보겠습니다.

> db.demo17.find({"ListOfSubject": { "$all": ["C++","PL/SQL","MongoDB"] } });

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

{ "_id" : ObjectId("5e13849255d0fc6657d21f0c"), "ListOfSubject" : [ "C++", "MongoDB",
"PL/SQL" ] }

결과 분석 및 핵심 정리

쿼리 결과를 보면 세 개의 문서 중 오직 하나의 문서만 반환되었습니다. 그 이유는 해당 문서만이 요청한 세 가지 값('C++', 'PL/SQL', 'MongoDB')을 모두 포함하고 있기 때문입니다.

  • $all 연산자: 배열 필드가 지정된 모든 요소를 포함하는 경우에만 매칭됩니다.
  • 순서 무관: 배열 내 요소의 순서와 상관없이 모든 값이 존재하면 일치로 판단합니다.
  • 활용 사례: 태그 기반 검색, 스킬 매칭, 카테고리 필터링 등 복수 조건이 모두 충족되어야 하는 상황에 유용합니다.

이처럼 MongoDB의 $all 연산자를 활용하면 배열 필드에 대한 복합 조건 검색을 간단하고 직관적으로 처리할 수 있습니다.