MongoDB에서 집계 파이프라인을 이용한 문서 업데이트 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
C# 개발자 및 MongoDB를 사용하는 웹 개발자
난이도: 중급 이상 (집계 파이프라인 및 LINQ 사용 기술 필요)
핵심 요약
- MongoDB C# 드라이버는
$inc
,$set
등 기본 업데이트 연산자 외에도 집계 파이프라인을 사용한 복잡한 업데이트 가능 - 업데이트 시
Total
,Count
,Average
등의 계산을 파이프라인 단계에서 처리하여 단일 요청으로 수행 - 업세트(
Upsert
) 처리 시null
값 대응을 위한 조건식(x.Total > 0 ? x.Total : 0
) 필수 TopReadings
배열 관리 시 LINQ로 정렬 및 필터링 적용
섹션별 세부 요약
1. 집계 파이프라인을 통한 문서 업데이트
- 기본 업데이트 연산자(
$inc
,$set
)로는Average
계산 불가능 - 집계 파이프라인을 사용해
Total
,Count
,Average
를 단일 요청으로 업데이트 - 예시:
Total = x.Total + newReading.Value
,Count = x.Count + 1
,Average = x.Total / x.Count
- 업데이트 시
Total
과Count
의 값이 0인 경우 예외 처리 필요
2. 업세트(`Upsert`) 처리
- 기존 문서가 없을 경우
IsUpsert = true
설정으로 새 문서 생성 TopReadings
배열 초기화 시x.TopReadings ?? new()
사용하여null
대응- LINQ로
Union
,OrderByDescending
,Take(3)
등 사용해 배열 관리 Average
계산 시Total
과Count
의 값이 0일 경우 조건식으로 대체
3. `TopReadings` 배열 추가 및 관리
TopReadings
프로퍼티를List
형식으로 정의- LINQ로
Union
후Value
기준 내림차순 정렬 후 상위 3개만 보존 - 예시:
TopReadings.Union(new Reading[] { newReading }).OrderByDescending(x => x.Value).Take(3).ToList()
- 업데이트 후
TopReadings
배열이 정렬된 상태로 저장
4. 실무 적용 고려사항
- 모든 집계 파이프라인 연산자가 업데이트에 지원되는지 MongoDB 문서 확인 필수
UpdateMany
또는UpdateManyAsync
로 대량 업데이트 시 적용 가능한 파이프라인 사용- 업데이트 효율성 향상 위해 단일 요청으로 처리
- 보안 및 일관성 유지 위해 다중 문서 트랜잭션 필요 시 사용
결론
MongoDB C# 드라이버는 LINQ를 복잡한 MongoDB 집계 명령으로 변환하여 업데이트를 효율적으로 수행할 수 있으며, Upsert
및 배열 관리 시 조건식과 LINQ를 활용해 안정성을 확보해야 합니다. Total
과 Count
계산 시 null
대응과 TopReadings
배열 정렬은 필수적인 실무 팁입니다.