[파이썬] mongoengine 집계(`Aggregation`) 파이프라인 사용

MongoEngine은 MongoDB를 편리하게 다룰 수 있는 ORM(Object Relational Mapping) 라이브러리입니다. 이 라이브러리를 사용하면 Python 코드를 통해 MongoDB 데이터에 쉽게 접근하고 조작할 수 있습니다. 이번 글에서는 MongoEngine의 집계(Aggregation) 기능인 파이프라인(Pipeline)을 사용하여 데이터를 집계하는 방법에 대해 알아보겠습니다.

집계(Aggregation)란?

집계(Aggregation)는 MongoDB에서 여러 도큐먼트를 그룹화하고, 필터링하며, 계산하는 작업을 말합니다. 파이프라인은 이러한 집계 작업을 순차적으로 수행하고 결과를 반환하기 위한 방법입니다. 파이프라인은 여러 개의 단계로 구성되며, 각 단계에는 집계 연산자와 해당 연산자에 필요한 필드나 값이 포함됩니다.

MongoEngine에서의 파이프라인 사용

MongoEngine에서 파이프라인을 사용하려면 aggregate 메서드를 호출해야 합니다. 이 메서드는 인자로 파이프라인 단계를 구성하는 표현식을 받습니다. 각 단계는 {'$<operator>': {<field>: <value>}} 형태로 표현됩니다.

다음은 간단한 예제를 통해 MongoEngine의 파이프라인 사용법을 살펴보겠습니다.

from mongoengine import *
import datetime

connect('<database_name>')

class Order(Document):
    product = StringField()
    quantity = IntField()
    date = DateTimeField(default=datetime.datetime.now)

# 2021년도 주문량 집계하기
pipeline = [
    {'$match': {'date': {'$gte': datetime.datetime(2021, 1, 1), '$lt': datetime.datetime(2022, 1, 1)}}},
    {'$group': {'_id': '$product', 'total_quantity': {'$sum': '$quantity'}}},
    {'$sort': {'total_quantity': -1}}
]

result = Order.objects.aggregate(*pipeline)

for doc in result:
    print(doc)

이 예제는 Order 컬렉션에서 2021년 주문량을 집계하고, 주문량이 많은 상품부터 내림차순으로 정렬하여 출력하는 코드입니다. $match, $group, $sort 등의 연산자를 사용하여 파이프라인을 구성하였습니다. 결과는 aggregate 메서드를 통해 얻을 수 있습니다.

MongoEngine의 집계 파이프라인을 사용하면 복잡한 데이터 분석 및 집계 작업을 쉽게 수행할 수 있습니다. 또한 파이프라인의 단계를 조합하여 원하는 결과를 얻을 수 있습니다.

이상으로 MongoEngine의 집계(Aggregation) 파이프라인 사용에 대해 알아보았습니다. 추가적인 정보는 MongoEngine 공식 문서를 참고하시기 바랍니다.