[파이썬] mongoengine 원시 쿼리(Raw Query) 실행하기

Mongoengine은 Python에서 MongoDB와 상호 작용하기 위한 Object-Document Mapping (ODM) 라이브러리입니다. 기본적으로 Mongoengine을 사용하면 ORM 스타일로 MongoDB 쿼리를 작성할 수 있지만, 때로는 원시 쿼리(Raw Query)를 실행해야 하는 경우가 있습니다. 원시 쿼리를 사용하면 MongoDB의 강력한 쿼리 기능을 직접 활용할 수 있고, 특정 상황에 더 최적화된 쿼리를 실행할 수 있습니다.

이번 글에서는 Mongoengine에서 원시 쿼리를 실행하는 방법을 살펴보겠습니다.

원시 쿼리 실행하기

Mongoengine은 mongoengine.connection 모듈을 통해 MongoDB와의 연결을 관리합니다. 이 모듈에는 get_dbget_connection 메서드를 통해 현재 연결된 MongoDB 인스턴스에 접근할 수 있습니다. 원시 쿼리를 실행하기 위해선 get_db().command() 메서드를 사용하면 됩니다.

아래는 Mongoengine을 사용하여 MongoDB에 있는 users 컬렉션에서 모든 문서를 조회하는 원시 쿼리의 예제입니다.

from mongoengine import connection

# MongoDB에 연결
connection.connect("mydatabase")

# 원시 쿼리 실행
result = connection.get_db().command("find", "users")

# 결과 출력
print(result)

위의 예제에서는 command 메서드에 "find" 쿼리와 "users" 컬렉션을 인자로 전달하여 모든 문서를 조회하고 있습니다. 조회 결과는 result 변수에 저장되며, 이를 사용하여 필요한 작업을 수행할 수 있습니다.

필터링 및 정렬하기

릴레이션이 많은 문서를 처리하는 경우, 원시 쿼리를 통해 결과를 필터링하고 정렬하는 것이 중요합니다. MongoDB는 강력한 쿼리 기능을 제공하므로, 쿼리를 최적화하여 데이터베이스 서버의 부하를 줄일 수 있습니다.

아래 예제는 users 컬렉션에서 이름이 “John”인 사용자를 조회하고, 가장 최근에 생성된 사용자부터 정렬하는 원시 쿼리의 예제입니다.

from mongoengine import connection

# MongoDB에 연결
connection.connect("mydatabase")

# 원시 쿼리 실행
query = {
    "name": "John"
}
sort = [
    ("_id", -1)
]
result = connection.get_db().command("find", "users", filter=query, sort=sort)

# 결과 출력
print(result)

위의 예제에서는 filter 인자를 사용하여 쿼리를 필터링하고, sort 인자를 사용하여 결과를 정렬하고 있습니다. 이와 같은 방식으로 원시 쿼리를 활용하여 원하는 데이터를 조작할 수 있습니다.

결론

Mongoengine은 Python에서 MongoDB와 상호 작용하기 위한 강력한 ODM 라이브러리입니다. 하지만 때로는 더 복잡하거나 최적화된 쿼리를 실행해야 하는 상황이 발생할 수 있습니다. 이럴 때는 Mongoengine에서 제공하는 원시 쿼리 기능을 활용하여 MongoDB의 풍부한 기능을 직접 활용할 수 있습니다. 이 글을 통해 원시 쿼리를 실행하는 방법에 대해 배웠으니, 이제 더 복잡한 쿼리 작성에 도전해보세요!