[파이썬] mongoengine 데이터 정렬하기

MongoEngine은 MongoDB를 사용하는 애플리케이션을 파이썬에서 빠르고 쉽게 개발할 수 있도록 도와주는 ODM(Object Document Mapper)입니다. MongoEngine을 사용하면 MongoDB에 저장된 데이터를 쉽게 다룰 수 있으며, 데이터를 필터링하거나 정렬하는 작업도 간단하게 처리할 수 있습니다.

이번 글에서는 MongoEngine을 사용하여 데이터를 정렬하는 방법에 대해 알아보겠습니다.

데이터 정렬하기

MongoDB에서 데이터를 검색할 때 특정 필드를 기준으로 정렬된 결과를 얻을 수 있습니다. MongoEngine에서도 orderby() 메서드를 사용하여 데이터를 정렬할 수 있습니다.

다음 예제에서는 Person이라는 모델에서 이름을 기준으로 오름차순으로 데이터를 정렬하는 방법을 보여줍니다.

from mongoengine import Document, StringField
from mongoengine.queryset.visitor import Q

class Person(Document):
   name = StringField(required=True)

# 이름을 기준으로 오름차순으로 정렬된 결과를 얻는다.
result = Person.objects().order_by('name')

for person in result:
    print(person.name)

위의 예제에서는 Person 모델에 name 필드가 있다고 가정합니다. Person.objects().order_by('name') 코드는 Person 객체들을 이름을 기준으로 오름차순으로 정렬하여 결과를 반환합니다. result 변수에는 정렬된 결과가 담겨 있고, 이를 반복문으로 순회하며 이름을 출력하였습니다.

내림차순 정렬

오름차순 정렬뿐만 아니라 내림차순으로 데이터를 정렬할 수도 있습니다. 내림차순으로 정렬하려면 필드 이름 앞에 ‘-‘(마이너스) 기호를 사용하면 됩니다.

다음 예제는 Person 모델에서 이름을 기준으로 내림차순으로 데이터를 정렬하는 방법을 보여줍니다.

from mongoengine import Document, StringField
from mongoengine.queryset.visitor import Q

class Person(Document):
   name = StringField(required=True)

# 이름을 기준으로 내림차순으로 정렬된 결과를 얻는다.
result = Person.objects().order_by('-name')

for person in result:
    print(person.name)

Person.objects().order_by('-name') 코드에서는 이름 앞에 ‘-‘ 기호를 추가하여 이름을 기준으로 내림차순으로 정렬된 결과를 얻습니다.

여러 필드로 정렬하기

MongoEngine에서는 여러 개의 필드로 데이터를 정렬하는 것도 가능합니다. 필드 이름을 리스트로 전달하여 원하는 순서대로 데이터를 정렬할 수 있습니다.

다음 예제는 Person 모델에서 이름을 기준으로 오름차순으로 정렬한 후, 나이를 기준으로 내림차순으로 정렬하는 방법을 보여줍니다.

from mongoengine import Document, StringField, IntField
from mongoengine.queryset.visitor import Q

class Person(Document):
   name = StringField(required=True)
   age = IntField(required=True)

# 이름을 기준으로 오름차순으로 정렬하고, 그 후 나이를 내림차순으로 정렬한 결과를 얻는다.
result = Person.objects().order_by('name', '-age')

for person in result:
    print(person.name, person.age)

Person.objects().order_by('name', '-age') 코드에서는 이름 앞에 ‘name’을, 나이 앞에 ‘-age’를 추가하여 이름으로 먼저 정렬한 후, 그 후에는 나이로 내림차순으로 정렬된 결과를 얻습니다.

정렬 방식 변경하기

MongoEngine에서는 정렬 방식도 원하는대로 변경할 수 있습니다. 기본적으로 모든 필드는 오름차순으로 정렬되지만, 특정 필드의 정렬 방식을 변경할 수 있습니다.

다음 예제는 Person 모델에서 이름을 기준으로 오름차순, 나이를 기준으로 내림차순으로 정렬하되, 나이는 오름차순으로 정렬하는 방법을 보여줍니다.

from mongoengine import Document, StringField, IntField
from mongoengine.queryset.visitor import Q

class Person(Document):
   name = StringField(required=True)
   age = IntField(required=True)

# 이름을 기준으로 오름차순으로 정렬하고, 그 후 나이를 오름차순으로 정렬한 결과를 얻는다.
result = Person.objects().order_by('name', '+age')

for person in result:
    print(person.name, person.age)

Person.objects().order_by('name', '+age') 코드에서는 이름 앞에 ‘name’을, 나이 앞에 ‘+age’를 추가하여 이름으로 먼저 정렬한 후, 그 후에는 나이로 오름차순으로 정렬된 결과를 얻습니다.

위의 예제에서 사용된 ‘+’ 기호는 생략 가능하며, 모든 필드는 기본적으로 오름차순으로 정렬됩니다.

결론

MongoEngine을 사용하여 MongoDB에서 데이터를 정렬하는 방법을 살펴보았습니다. orderby() 메서드를 사용하여 단일 필드 또는 다중 필드에 대해 오름차순 또는 내림차순으로 정렬할 수 있습니다.

추가적으로 해당 필드의 정렬 방식까지 변경할 수도 있습니다. MongoDB에서 데이터를 검색하고 정렬하는 작업을 쉽게 처리할 수 있도록 MongoEngine이 제공하는 다양한 기능을 활용하면 데이터 조작이 더욱 편리해질 것입니다.