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

MongoDB find 쿼리에서 배열 값 검색하는 방법 – 점(.) 표기법 활용 가이드

MongoDB에서 배열 내부의 특정 값을 검색하려면 점(.) 표기법(dot notation)을 사용합니다. 점 표기법은 배열 안에 포함된 하위 문서의 필드에 직접 접근할 수 있게 해주며, find() 쿼리와 함께 사용하면 원하는 조건에 맞는 문서만 정확하게 추출할 수 있습니다.

1. 샘플 컬렉션 생성

먼저 실습에 사용할 컬렉션을 만들고 문서 두 개를 삽입해 보겠습니다.

> db.retrievingArrayDemo.insertOne(
    { "UserDetails" : [
       { "UserName" : "John", "UserAge" : 23 } ],
       "UserCountryName" : "AUS",
       "UserLoginDate" : new ISODate(),
       "UserMessage" : "Hello"
    }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce9718478f00858fb12e920")
}
> db.retrievingArrayDemo.insertOne(
    { "UserDetails" : [
       { "UserName" : "Sam", "UserAge" : 24 } ],
       "UserCountryName" : "UK",
       "UserLoginDate" : new ISODate(),
       "UserMessage" : "Bye"
    }
);
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5ce9718478f00858fb12e921")
}

2. 전체 문서 조회하기

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

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

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

{
    "_id" : ObjectId("5ce9718478f00858fb12e920"),
    "UserDetails" : [
        {
            "UserName" : "John",
            "UserAge" : 23
        }
    ],
    "UserCountryName" : "AUS",
    "UserLoginDate" : ISODate("2019-05-25T16:47:00.211Z"),
    "UserMessage" : "Hello"
}
{
    "_id" : ObjectId("5ce9718478f00858fb12e921"),
    "UserDetails" : [
        {
            "UserName" : "Sam",
            "UserAge" : 24
        }
    ],
    "UserCountryName" : "UK",
    "UserLoginDate" : ISODate("2019-05-25T16:47:00.670Z"),
    "UserMessage" : "Bye"
}

3. 점 표기법으로 배열 값 검색하기

이제 find 쿼리에 점 표기법을 적용해 배열 내부의 값을 검색해 보겠습니다. 아래 쿼리는 국가명(UserCountryName)이 "UK"이면서, UserDetails 배열 안의 UserName이 "Sam"인 문서를 찾는 예제입니다.

> db.retrievingArrayDemo.find({"UserCountryName" : "UK", "UserDetails.UserName":"Sam"}).pretty();

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

{
    "_id" : ObjectId("5ce9718478f00858fb12e921"),
    "UserDetails" : [
        {
            "UserName" : "Sam",
            "UserAge" : 24
        }
    ],
    "UserCountryName" : "UK",
    "UserLoginDate" : ISODate("2019-05-25T16:47:00.670Z"),
    "UserMessage" : "Bye"
}

핵심 포인트 정리

  • "배열이름.하위필드" 형태로 작성하면 MongoDB가 배열의 각 요소를 자동으로 순회하며 조건을 비교합니다.
  • 여러 조건을 콤마(,)로 나열하면 AND 조건으로 처리되어 더욱 정밀한 검색이 가능합니다.
  • 쿼리 마지막에 pretty() 메서드를 붙이면 결과가 보기 좋게 정렬되어 출력됩니다.