AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

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
  • 업데이트 시 TotalCount의 값이 0인 경우 예외 처리 필요

2. 업세트(`Upsert`) 처리

  • 기존 문서가 없을 경우 IsUpsert = true 설정으로 새 문서 생성
  • TopReadings 배열 초기화 시 x.TopReadings ?? new() 사용하여 null 대응
  • LINQ로 Union, OrderByDescending, Take(3) 등 사용해 배열 관리
  • Average 계산 시 TotalCount의 값이 0일 경우 조건식으로 대체

3. `TopReadings` 배열 추가 및 관리

  • TopReadings 프로퍼티를 List 형식으로 정의
  • LINQ로 UnionValue 기준 내림차순 정렬 후 상위 3개만 보존
  • 예시: TopReadings.Union(new Reading[] { newReading }).OrderByDescending(x => x.Value).Take(3).ToList()
  • 업데이트 후 TopReadings 배열이 정렬된 상태로 저장

4. 실무 적용 고려사항

  • 모든 집계 파이프라인 연산자가 업데이트에 지원되는지 MongoDB 문서 확인 필수
  • UpdateMany 또는 UpdateManyAsync로 대량 업데이트 시 적용 가능한 파이프라인 사용
  • 업데이트 효율성 향상 위해 단일 요청으로 처리
  • 보안 및 일관성 유지 위해 다중 문서 트랜잭션 필요 시 사용

결론

MongoDB C# 드라이버는 LINQ를 복잡한 MongoDB 집계 명령으로 변환하여 업데이트를 효율적으로 수행할 수 있으며, Upsert 및 배열 관리 시 조건식과 LINQ를 활용해 안정성을 확보해야 합니다. TotalCount 계산 시 null 대응과 TopReadings 배열 정렬은 필수적인 실무 팁입니다.