[파이썬] mongoengine 고급 쿼리 연산자 사용하기

Mongoengine은 파이썬에서 MongoDB를 다루기 위한 객체 문서 매핑(Object Document Mapping) 라이브러리입니다. 이 라이브러리를 사용하면 파이썬 코드를 통해 MongoDB에 데이터를 저장, 조회 및 조작할 수 있습니다. 이번 블로그 포스트에서는 Mongoengine을 사용하여 고급 쿼리 연산자를 적용하는 방법에 대해 알아보겠습니다.

1. Q 객체를 사용한 조건 연산자 조합

Mongoengine에서는 Q 객체를 사용하여 조건 연산자를 조합할 수 있습니다. Q 객체는 비교 연산자(>, <, >=, <=, ==)를 사용하여 생성할 수 있으며, 논리 연산자(AND, OR, NOT)를 사용하여 조건을 조합할 수 있습니다.

from mongoengine import Q

# age가 30보다 크고 name이 'John'인 도큐먼트 조회
query = Q(age__gt=30) & Q(name='John')
result = MyDocument.objects(query)

2. 복잡한 쿼리 연산자 사용하기

Mongoengine은 다양한 고급 쿼리 연산자를 제공합니다. 이러한 연산자를 사용하면 더 복잡한 쿼리를 작성할 수 있습니다. 다음은 몇 가지 예제입니다.

2.1. $in 연산자 사용하기

from mongoengine import Q

# age가 20, 30, 40인 도큐먼트 조회
query = Q(age__in=[20, 30, 40])
result = MyDocument.objects(query)

2.2. $regex 연산자 사용하기

from mongoengine import Q

# name이 'John'으로 시작하는 도큐먼트 조회
query = Q(name__regex=r'^John')
result = MyDocument.objects(query)

3. QuerySet 메서드 체인

Mongoengine의 QuerySet은 체인 형태로 여러 메서드를 연속적으로 호출하여 쿼리를 작성할 수 있습니다.

from mongoengine import Q

# age가 30보다 큰 도큐먼트 중에서 name이 'John'인 도큐먼트 조회
result = MyDocument.objects(age__gt=30, name='John')

4. Geo 관련 쿼리

Mongoengine은 GeoJSON을 지원하므로 지리적 위치 정보를 쿼리하는 데 사용할 수 있습니다.

from mongoengine import Q, PointField

# 위치가 (37.7749, -122.4194) 근처인 도큐먼트 조회
query = Q(location__near=[37.7749, -122.4194], location__max_distance=5000)
result = MyDocument.objects(query)

결론

Mongoengine을 사용하면 파이썬에서 MongoDB에 대한 고급 쿼리를 쉽게 작성할 수 있습니다. Q 객체를 사용하여 조건 연산자를 조합하거나, 다양한 고급 쿼리 연산자를 사용하거나, QuerySet 메서드를 체인하여 쿼리를 작성할 수 있습니다. Geo 관련 쿼리를 사용하여 지리적 위치 정보를 쿼리하는 것도 가능합니다. 이러한 기능을 활용하여 MongoDB 데이터를 더욱 유연하게 다루어 보세요.