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

MongoDB 이중 중첩 배열에서 텍스트 검색하는 방법

MongoDB의 이중 중첩 배열(Double Nested Array) 내부에서 특정 텍스트를 검색하려면 점(.) 표기법을 사용하면 됩니다. 이 글에서는 실제 예제를 통해 컬렉션 생성부터 이중 중첩 배열 검색까지 단계별로 살펴보겠습니다.

1. 샘플 컬렉션 생성하기

먼저 insertOne() 메서드를 사용하여 문서가 포함된 컬렉션을 생성합니다. 아래 쿼리는 학생 정보 안에 프로젝트 세부 정보가 중첩된 구조의 문서 두 개를 삽입합니다.

> db.doubleNestedArrayDemo.insertOne(
...     {
...        "StudentId" : "1000",
...        "StudentName" : "Larry",
...        "StudentDetails" : [
...           {
...              "ProjectName" : "Online Banking",
...              "ProjectDetails" : [
...                 {
...                    "TechnologyUsed" : "Java"
...                 },
...                 {
...                    "TechnologyUsed" : "MySQL in Backend"
...                 }
...              ]
...           }
...        ]
...    }
... );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c992bd7330fd0aa0d2fe4cc")
}
> db.doubleNestedArrayDemo.insertOne( { "StudentId" : "1001", "StudentName" : "Robert", "StudentDetails" : [ { "ProjectName" : "Student Web Tracker", "ProjectDetails" : [ { "TechnologyUsed" : "Django Framework" }, { "TechnologyUsed" : "MongoDB in Backend" } ] } ] } );
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5c992cdb330fd0aa0d2fe4cd")
}

첫 번째 문서에는 'Larry' 학생의 'Online Banking' 프로젝트 정보가, 두 번째 문서에는 'Robert' 학생의 'Student Web Tracker' 프로젝트 정보가 각각 이중 중첩 배열 형태로 저장되었습니다.

2. 저장된 문서 확인하기

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

> db.doubleNestedArrayDemo.find().pretty()

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

{
    "_id" : ObjectId("5c992bd7330fd0aa0d2fe4cc"),
    "StudentId" : "1000",
    "StudentName" : "Larry",
    "StudentDetails" : [
       {
          "ProjectName" : "Online Banking",
          "ProjectDetails" : [
             {
                "TechnologyUsed" : "Java"
             },
             {
                "TechnologyUsed" : "MySQL in Backend"
             }
          ]
       }
    ]
}
{
    "_id" : ObjectId("5c992cdb330fd0aa0d2fe4cd"),
    "StudentId" : "1001",
    "StudentName" : "Robert",
    "StudentDetails" : [
       {
          "ProjectName" : "Student Web Tracker",
          "ProjectDetails" : [
             {
                "TechnologyUsed" : "Django Framework"
             },
             {
                "TechnologyUsed" : "MongoDB in Backend"
             }
          ]
       }
    ]
}

3. 이중 중첩 배열에서 텍스트 검색하기

이제 점(.) 표기법으로 필드 경로를 지정하여 이중 중첩 배열 안에서 원하는 텍스트를 검색할 수 있습니다. 여기서는 "Java"라는 텍스트가 포함된 레코드를 찾아보겠습니다.

> db.doubleNestedArrayDemo.find({"StudentDetails.ProjectDetails.TechnologyUsed":"Java"}).pretty();

쿼리 경로는 StudentDetails.ProjectDetails.TechnologyUsed와 같이 최상위 필드부터 중첩된 필드까지 점(.)으로 연결하여 작성합니다. MongoDB는 배열 내부의 모든 요소를 자동으로 순회하며, 조건과 일치하는 값을 가진 문서만 반환합니다.

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

{
    "_id" : ObjectId("5c992bd7330fd0aa0d2fe4cc"),
    "StudentId" : "1000",
    "StudentName" : "Larry",
    "StudentDetails" : [
       {
          "ProjectName" : "Online Banking",
          "ProjectDetails" : [
             {
                "TechnologyUsed" : "Java"
             },
             {
                "TechnologyUsed" : "MySQL in Backend"
             }
          ]
       }
    ]
}

'Larry' 학생의 프로젝트에 "Java" 기술이 사용되었기 때문에 해당 문서만 결과로 반환된 것을 확인할 수 있습니다.

마무리 정리

이처럼 MongoDB에서는 점(.) 표기법만으로도 배열이 몇 단계로 중첩되어 있든 내부 필드 값을 손쉽게 검색할 수 있습니다. 참고로 위 예제는 정확한 값 일치 방식이며, 부분 문자열(특정 텍스트 포함 여부)을 검색하려면 $regex 연산자나 $elemMatch, 텍스트 인덱스를 함께 활용하는 것이 좋습니다.