MongoDB 프로젝션(Projection)

2025. 2. 15. 10:52·DataBase/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에서 데이터를 효율적으로 다루는 핵심 기능입니다. 적절한 프로젝션 사용으로 애플리케이션의 성능과 효율성을 크게 향상시킬 수 있습니다.

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

'DataBase > MongoDB' 카테고리의 다른 글

MongoDB Aggregate 파이프라인  (0) 2025.02.25
Windows에서 Linux로 MongoDB 마이그레이션 하기  (0) 2025.01.19
MongoDB 쿼리 작성법과 최적화  (3) 2024.12.03
'DataBase/MongoDB' 카테고리의 다른 글
  • MongoDB Aggregate 파이프라인
  • Windows에서 Linux로 MongoDB 마이그레이션 하기
  • MongoDB 쿼리 작성법과 최적화
코샵
코샵
나의 코딩 일기장
    반응형
  • 코샵
    끄적끄적 코딩 공방
    코샵
    • 분류 전체보기 (730)
      • 스마트팜 (1)
      • 상품 추천 (223)
      • DataBase (0)
        • MongoDB (4)
        • PostgreSQL (0)
      • 하드웨어 (19)
      • 일기장 (4)
      • 파이썬 (131)
        • Basic (42)
        • 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 (5)
      • 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)
  • 인기 글

  • 태그

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

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

티스토리툴바