MongoDB 프로젝션(Projection)

2025. 2. 15. 10:52·MongoDB
반응형

프로젝션은 MongoDB에서 쿼리 결과로 반환될 필드를 선택하는 기능입니다. 필요한 필드만 선택적으로 가져옴으로써 네트워크 대역폭을 절약하고 애플리케이션의 성능을 향상시킬 수 있습니다.

기본 프로젝션 문법

// 기본 형태
db.collection.find({}, { field1: 1, field2: 1 })

// 예시: 사용자의 이름과 이메일만 가져오기
db.users.find(
    {}, 
    { name: 1, email: 1 }
)

필드 제외하기

// 특정 필드 제외
db.users.find(
    {},
    { password: 0, secretKey: 0 }
)

// _id 필드 제외
db.users.find(
    {},
    { _id: 0, name: 1, email: 1 }
)

중첩 문서의 프로젝션

// 중첩 문서 구조
{
    name: "John",
    address: {
        street: "123 Main St",
        city: "New York",
        country: "USA"
    }
}

// 특정 중첩 필드만 선택
db.users.find(
    {},
    { 
        name: 1,
        "address.city": 1,
        "address.country": 1
    }
)

배열 필드의 프로젝션

// 배열의 특정 요소 선택
db.posts.find(
    {},
    { 
        title: 1,
        comments: { $slice: 2 }  // 처음 2개의 댓글만
    }
)

// 배열의 마지막 요소
db.posts.find(
    {},
    {
        title: 1,
        comments: { $slice: -1 }  // 마지막 댓글
    }
)

// 특정 범위의 배열 요소
db.posts.find(
    {},
    {
        comments: { $slice: [5, 10] }  // 5번째부터 10개
    }
)

조건부 프로젝션

// $elemMatch 사용
db.posts.find(
    {},
    {
        title: 1,
        comments: {
            $elemMatch: { 
                author: "John" 
            }
        }
    }
)

// 배열 필터링과 프로젝션 결합
db.inventory.find(
    { 
        "items.price": { $gt: 100 }
    },
    {
        name: 1,
        "items.$": 1
    }
)

프로젝션 활용 사례

페이지네이션과 프로젝션

// 페이지당 10개씩, 2번째 페이지
db.products.find(
    {},
    { name: 1, price: 1 }
)
.skip(10)
.limit(10)

집계 파이프라인에서의 프로젝션

db.orders.aggregate([
    { $match: { status: "completed" } },
    { 
        $project: {
            _id: 0,
            orderNumber: 1,
            customer: {
                name: "$customerDetails.name",
                email: "$customerDetails.email"
            },
            total: { 
                $multiply: ["$quantity", "$price"] 
            }
        }
    }
])

성능 최적화 팁

// 인덱스 커버링을 활용한 프로젝션
db.users.createIndex({ name: 1, email: 1 })

// 이제 이 쿼리는 인덱스만으로 처리 가능
db.users.find(
    { name: "John" },
    { name: 1, email: 1, _id: 0 }
)

// 큰 배열 필드 처리
db.posts.find(
    {},
    {
        title: 1,
        comments: { 
            $slice: 5  // 필요한 만큼만 가져오기
        }
    }
)

프로젝션을 효과적으로 사용하면 다음과 같은 이점을 얻을 수 있습니다:

  1. 네트워크 효율성
    • 필요한 데이터만 전송
    • 대역폭 사용량 감소
  2. 메모리 사용량 최적화
    • 애플리케이션 메모리 사용 감소
    • 불필요한 데이터 로딩 방지
  3. 보안 강화
    • 민감한 필드 제외 가능
    • 데이터 노출 최소화
  4. 쿼리 성능 향상
    • 인덱스 커버링 활용
    • 데이터 처리량 감소

프로젝션은 MongoDB에서 데이터를 효율적으로 다루는 핵심 기능입니다. 적절한 프로젝션 사용으로 애플리케이션의 성능과 효율성을 크게 향상시킬 수 있습니다.

저작자표시 비영리 변경금지 (새창열림)

'MongoDB' 카테고리의 다른 글

MongoDB Aggregate 파이프라인  (0) 2025.02.25
Windows에서 Linux로 MongoDB 마이그레이션 하기  (0) 2025.01.19
MongoDB 쿼리 작성법과 최적화  (3) 2024.12.03
'MongoDB' 카테고리의 다른 글
  • MongoDB Aggregate 파이프라인
  • Windows에서 Linux로 MongoDB 마이그레이션 하기
  • MongoDB 쿼리 작성법과 최적화
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (725)
      • 스마트팜 (0)
      • 상품 추천 (223)
      • MongoDB (4)
      • 하드웨어 (17)
      • 일기장 (4)
      • 파이썬 (130)
        • Basic (41)
        • OpenCV (8)
        • Pandas (15)
        • PyQT (3)
        • SBC(Single Board Computer) (1)
        • 크롤링 (14)
        • Fast API (29)
        • Package (6)
      • Unity (138)
        • Tip (41)
        • Project (1)
        • Design Pattern (8)
        • Firebase (6)
        • Asset (2)
      • Linux (4)
      • C# (97)
        • Algorithm (11)
        • Window (7)
      • TypeScript (51)
        • CSS (10)
      • Git (11)
      • SQL (5)
      • Flutter (10)
        • Tip (1)
      • System (1)
      • BaekJoon (6)
      • Portfolio (2)
      • MacOS (1)
      • 유틸리티 (1)
      • 서비스 (6)
      • 자동화 (3)
      • Hobby (10)
        • 물생활 (10)
        • 식집사 (0)
  • 인기 글

  • 태그

    카페24리뷰
    파이썬
    믈레코비타멸균우유
    상품 리뷰 크롤링
    쇼핑몰리뷰
    셀레니움
    리스트
    ipcamera
    codingcommunity
    programmerlife
    라떼우유
    programming101
    list
    카페24리뷰이관
    cv2
    C#
    learntocode
    긴유통기한우유
    스마트스토어리뷰
    unity
    리뷰관리
    스크립트 실행
    devlife
    유니티
    rtsp
    스크립트 실행 순서
    Python
    codingtips
    리뷰이관
    appdevelopment
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
코샵
MongoDB 프로젝션(Projection)
상단으로

티스토리툴바