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

MongoDB에서 배열에 특정 값만 포함된 문서를 조회하는 방법

MongoDB에서 배열 필드가 특정 값 하나만 포함하고 있는 문서를 찾고 싶다면 어떻게 해야 할까요? 이 글에서는 find() 메서드에 배열 전체를 조건으로 지정하여 원하는 문서만 정확하게 조회하는 방법을 단계별로 살펴봅니다.

1. 샘플 컬렉션 생성하기

먼저 테스트용 컬렉션에 문서를 삽입합니다. 학생 정보와 함께 기술 과목 목록을 배열로 저장합니다.

> db.arrayContainOnlySpecificFieldDemo.insertOne(
...     {
...        "StudentName": "John",
...        "StudentAge": 21,
...        "StudentTechnicalSubject": ["C", "Java", "MongoDB"]
...     }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cc4921dac184d684e3fa26a")
}
> db.arrayContainOnlySpecificFieldDemo.insertOne(
...     {
...        "StudentName": "Carol",
...        "StudentAge": 23,
...        "StudentTechnicalSubject": ["MongoDB"]
...     }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5cc49237ac184d684e3fa26b")
}

위 예제에서는 두 개의 문서를 생성했습니다. 첫 번째 문서의 StudentTechnicalSubject 배열에는 세 개의 값이 들어 있고, 두 번째 문서에는 "MongoDB"라는 값 하나만 들어 있습니다.

2. 전체 문서 확인하기

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

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

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

{
    "_id" : ObjectId("5cc4921dac184d684e3fa26a"),
    "StudentName" : "John",
    "StudentAge" : 21,
    "StudentTechnicalSubject" : [
       "C",
       "Java",
       "MongoDB"
    ]
}
{
    "_id" : ObjectId("5cc49237ac184d684e3fa26b"),
    "StudentName" : "Carol",
    "StudentAge" : 23,
    "StudentTechnicalSubject" : [
       "MongoDB"
    ]
}

3. 배열이 특정 값만 포함한 문서 조회하기

핵심은 쿼리 조건에 배열 값을 대괄호([])로 감싸서 배열 형태 그대로 지정하는 것입니다. 이렇게 하면 MongoDB는 해당 필드가 지정한 배열과 완전히 일치하는 문서만 반환합니다.

> db.arrayContainOnlySpecificFieldDemo.find({"StudentTechnicalSubject": ["MongoDB"]}).pretty();

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

{
    "_id" : ObjectId("5cc49237ac184d684e3fa26b"),
    "StudentName" : "Carol",
    "StudentAge" : 23,
    "StudentTechnicalSubject" : [
       "MongoDB"
    ]
}

결과 분석 및 핵심 포인트

쿼리 결과를 보면 첫 번째 문서(John)는 제외되고 두 번째 문서(Carol)만 반환되었습니다. 그 이유는 다음과 같습니다.

  • ["MongoDB"]로 검색한 경우: 배열 전체가 정확히 ["MongoDB"]와 일치해야 하므로, 요소가 하나뿐인 Carol의 문서만 매칭됩니다.
  • "MongoDB"(따옴표 없이 문자열로) 검색한 경우: 배열 내 어느 위치든 해당 값이 존재하기만 하면 매칭되므로, John과 Carol의 문서가 모두 반환됩니다.

즉, 배열 요소의 포함 여부를 확인하려면 값을 그대로 지정하고, 배열 전체가 특정 값만으로 구성되었는지 확인하려면 대괄호로 감싼 배열 형태로 조건을 작성하면 됩니다. 이 차이를 이해하면 MongoDB에서 배열 데이터를 훨씬 정밀하게 조회할 수 있습니다.