[파이썬] mongoengine 중첩된 임베디드 도큐먼트 활용

Mongoengine은 MongoDB를 위한 Object-Document Mapping (ODM) 라이브러리로, MongoDB 데이터베이스와의 상호작용을 간편하게 만들어줍니다. 중첩된 임베디드 도큐먼트는 Mongoengine에서 제공하는 강력한 기능 중 하나입니다. 중첩된 임베디드 도큐먼트를 활용하면 데이터 구조를 유연하게 설계하고, 데이터를 효율적으로 관리할 수 있습니다.

이 블로그 포스트에서는 Python에서 Mongoengine을 사용하여 중첩된 임베디드 도큐먼트를 어떻게 활용할 수 있는지 살펴보겠습니다.

임베디드 도큐먼트란?

임베디드 도큐먼트는 다른 도큐먼트 내부에서 사용되는 도큐먼트입니다. 즉, 다른 도큐먼트의 필드로 포함되어 사용되는 것입니다. 이는 MongoDB의 배열 형식인 EmbeddedDocumentListFieldEmbeddedDocumentField를 사용하여 구현됩니다.

예를 들어, 블로그 포스트와 댓글 모델을 생각해보겠습니다. 각 블로그 포스트는 여러 개의 댓글을 가질 수 있습니다. 이 경우 댓글을 임베디드 도큐먼트로 정의하여 블로그 포스트 도큐먼트의 필드로 포함시킬 수 있습니다.

예시 코드

다음은 Python에서 Mongoengine을 사용하여 중첩된 임베디드 도큐먼트를 정의하는 예시 코드입니다.

from mongoengine import *

class Comment(EmbeddedDocument):
    content = StringField(required=True)
    author = StringField(required=True)
    created_at = DateTimeField(default=datetime.datetime.now)

class BlogPost(Document):
    title = StringField(required=True)
    content = StringField(required=True)
    author = StringField(required=True)
    created_at = DateTimeField(default=datetime.datetime.now)
    comments = EmbeddedDocumentListField(Comment)

위 코드에서 Comment 클래스는 중첩된 임베디드 도큐먼트를 나타내며, content, author, created_at 필드를 가집니다.

BlogPost 클래스는 블로그 포스트를 나타내며, 제목(title), 내용(content), 작성자(author), 작성일(created_at) 필드와 함께 comments 필드로 Comment의 리스트를 포함하고 있습니다.

이제 CommentBlogPost 클래스를 사용하여 MongoDB에 데이터를 저장하고 조회하는 코드를 작성할 수 있습니다.

# Create a new blog post with comments
post = BlogPost(title="Mongoengine Blog Post",
                content="Learn how to use embedded documents in Mongoengine",
                author="John Doe")
post.comments.append(Comment(content="Great post!", author="Alice"))
post.comments.append(Comment(content="Thank you for sharing.", author="Bob"))
post.save()

# Retrieve the blog post
retrieved_post = BlogPost.objects.get(title="Mongoengine Blog Post")

# Access the comments
for comment in retrieved_post.comments:
    print(f"Author: {comment.author}")
    print(f"Content: {comment.content}")
    print(f"Created At: {comment.created_at}\n")

위 코드는 새로운 블로그 포스트를 생성하고, 댓글을 추가한 후 MongoDB에 저장하고 조회하는 예시입니다. 임베디드 도큐먼트의 필드에는 .append() 메서드를 사용하여 댓글을 추가할 수 있습니다. 또한 retrieved_post.comments로 댓글에 접근할 수 있으며, 댓글의 속성을 출력할 수 있습니다.

마무리

이번 블로그 포스트에서는 Mongoengine의 중첩된 임베디드 도큐먼트를 활용하는 방법을 소개했습니다. 중첩된 임베디드 도큐먼트를 사용하면 MongoDB 데이터 구조를 효율적으로 설계하고 관리할 수 있습니다. 필요에 따라 중첩된 임베디드 도큐먼트를 사용하여 좀 더 복잡한 데이터 구조를 구현해보세요!