You are viewing a single comment's thread from:

RE: PyMongo开发指南

in #starnote • 4 days ago

MongoEngine 的核心是 Document 类。每个继承 Document 的类对应一个集合。

from mongoengine import (
    Document, StringField, IntField, ListField,
    DateTimeField, EmbeddedDocument, EmbeddedDocumentField,
    ReferenceField, EmailField
)
from datetime import datetime, timezone

class Address(EmbeddedDocument):      # 嵌入式文档(不单独存集合)
    city = StringField(required=True)
    street = StringField()

class Student(Document):
    name = StringField(required=True, max_length=20)
    age = IntField(min_value=6, max_value=60, default=18)
    email = EmailField(unique=True, sparse=True)
    tags = ListField(StringField(), default=list)
    address = EmbeddedDocumentField(Address)
    #created_at = DateTimeField(default=datetime.utcnow)
    created_at = DateTimeField(default=lambda: datetime.now(timezone.utc), required=True)

    meta = {
        "collection": "students",
        "indexes": ["email", "-created_at"],
    }

    def to_dict(self):
        """序列化为 JSON 友好的字典(Flask 里 ObjectId 不能直接 jsonify)"""
        return {
            "id": str(self.id),
            "name": self.name,
            "age": self.age,
            "email": self.email,
            "tags": self.tags,
            "address": self.address,
            "created_at": self.created_at.isoformat(),
        }

class Course(Document):
    title = StringField(required=True)
    students = ListField(ReferenceField(Student))  # 引用关系