반응형
프로젝션은 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 // 필요한 만큼만 가져오기
}
}
)
프로젝션을 효과적으로 사용하면 다음과 같은 이점을 얻을 수 있습니다:
- 네트워크 효율성
- 필요한 데이터만 전송
- 대역폭 사용량 감소
- 메모리 사용량 최적화
- 애플리케이션 메모리 사용 감소
- 불필요한 데이터 로딩 방지
- 보안 강화
- 민감한 필드 제외 가능
- 데이터 노출 최소화
- 쿼리 성능 향상
- 인덱스 커버링 활용
- 데이터 처리량 감소
프로젝션은 MongoDB에서 데이터를 효율적으로 다루는 핵심 기능입니다. 적절한 프로젝션 사용으로 애플리케이션의 성능과 효율성을 크게 향상시킬 수 있습니다.
'MongoDB' 카테고리의 다른 글
Windows에서 Linux로 MongoDB 마이그레이션 하기 (0) | 2025.01.19 |
---|---|
MongoDB 쿼리 작성법과 최적화 (2) | 2024.12.03 |