Python

MongoEngine:Python 物件文件對映器(ODM) for MongoDB

MongoEngine 是一個 Python ODM,用於 MongoDB,提供類似 Django ORM 的宣告式 API,支援 MongoDB v4.4 至 v8.0。

Keeping this site alive takes effort — your support means everything.
無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分! 無程式碼也能輕鬆打造專業LINE官方帳號!一鍵導入模板,讓AI助你行銷加分!
MongoEngine:Python 物件文件對映器(ODM) for MongoDB

MongoDB 是最受歡迎的 NoSQL 資料庫之一,但直接使用原始的 PyMongo 可能會顯得冗長且容易出錯。您會花太多時間撰寫用於文件驗證、欄位型別檢查和關係管理的樣板程式碼。MongoEngine 解決了這個問題,它為 MongoDB 帶來了類似 Django 的宣告式抽象層,在超過十年的 Python 開發中經受了時間的考驗。

MongoEngine 是一個 Python 物件文件對映器(ODM),為與 MongoDB 互動提供了高階的宣告式 API。它將文件定義為帶有型別欄位的 Python 類別,支援驗證、關係、索引,並透過富有表達力的 QuerySet API 進行查詢。位於 github.com/MongoEngine/mongoengine 的專案自 2010 年以來一直處於活躍開發中,並持續在 MongoDB 4.4 到 8.0 版本之間保持維護。

該函式庫專為那些既想要 MongoDB 文件模型的靈活性,又想要型別化 Python 物件的安全性和生產效率的開發者而設計。如果您使用過 Django 的 ORM,那麼 MongoEngine 的模式會讓您立刻感到熟悉——這正是設計的初衷。

什麼是 MongoEngine?

MongoEngine 是一個 Python ODM,將 MongoDB 文件對映到 Python 物件。它提供欄位驗證、查詢建構、引用處理和模式強制執行,同時在需要時保留 MongoDB 的模式彈性。文件以類別形式宣告式定義,查詢返回的是型別化的 Python 物件,而非原始字典。

from mongoengine import Document, StringField, IntField, ListField

class User(Document):
    name = StringField(required=True, max_length=50)
    email = StringField(required=True, unique=True)
    age = IntField(min_value=0)
    tags = ListField(StringField())

# 使用方式
user = User(name="Alice", email="alice@example.com", age=30, tags=["python", "mongodb"])
user.save()

MongoEngine 有哪些依賴?

MongoEngine 的依賴腳印非常輕量。

依賴用途版本要求
PyMongo核心 MongoDB 驅動程式3.4+
MongoDB 伺服器資料庫後端4.4 至 8.0
gridfs(選用)支援大型檔案的 GridFS隨 PyMongo 提供
blinker(選用)支援前/後儲存鉤子的訊號機制1.1+

不需要 ORM 風格的神奇函式庫或 C 擴充。MongoEngine 是在 PyMongo 之上的純 Python 實作。

MongoEngine 支援哪些 MongoDB 版本?

MongoEngine 的相容性矩陣涵蓋 MongoDB 4.4 到最新的 8.0 版本。

MongoDB 版本MongoEngine 相容性主要特性
4.4完整支援穩定的生產使用
5.0完整支援時間序列集合
6.0完整支援變更串流、聚合改進
7.0完整支援可查詢加密、新的聚合階段
8.0完整支援最新的效能改進

該專案在所有支援的版本上維持 CI 測試,以確保與每個 MongoDB 發佈版本的相容性。

MongoEngine 模型在實務中長什麼樣子?

MongoEngine 的宣告式 API 讓文件建模變得直觀。以下是一個包含關係的更複雜範例:

from mongoengine import *

class Post(Document):
    title = StringField(required=True)
    content = StringField()
    published_date = DateTimeField()
    author = ReferenceField('User')
    tags = ListField(StringField())
    meta = {'indexes': ['title', 'published_date']}

class Comment(Document):
    post = ReferenceField(Post, reverse_delete_rule=CASCADE)
    author = StringField()
    text = StringField()
    created_date = DateTimeField(default=datetime.now)

查詢使用流暢的 QuerySet API,可以乾淨地鏈接:

posts = Post.objects(author=user, published_date__gte=some_date)
comments = Comment.objects(post=post).order_by('-created_date')

MongoEngine 可以與 Flask 一起使用嗎?

可以。Flask-MongoEngine 將 MongoEngine 包裝在 Flask 應用程式中,提供了設定模式和整合的工作階段處理。

from flask import Flask
from flask_mongoengine import MongoEngine

app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
    'host': 'mongodb://localhost:27017/mydatabase'
}
db = MongoEngine(app)

設定完成後,您的 MongoEngine Document 類別可以在 Flask 的應用程式上下文中運作,包括請求範圍的連線和範本全域變數。

常見問題

什麼是 MongoEngine?

MongoEngine 是一個 Python 物件文件對映器(ODM),用於 MongoDB,將資料庫文件對映到型別化的 Python 物件。它提供類似 Django ORM 的宣告式 API,包含欄位驗證、查詢建構和關係管理。

MongoEngine 有哪些依賴?

MongoEngine 唯一的硬依賴是 PyMongo 3.4+。選用依賴包括用於訊號支援的 blinker 和用於大型檔案儲存的 gridfs。

MongoEngine 支援哪些 MongoDB 版本?

完整支援 MongoDB 4.4、5.0、6.0、7.0 和 8.0。CI 測試涵蓋所有這些版本,以確保持續的相容性。

MongoEngine 模型長什麼樣子?

MongoEngine 模型是一個繼承自 Document 的 Python 類別,帶有型別化的欄位定義(StringField、IntField、DateTimeField、ReferenceField 等)。查詢使用類似 Django 的過濾語法,搭配流暢的 QuerySet API。

MongoEngine 是否與 Flask 相容?

是的。Flask-MongoEngine 提供無縫整合,在 Flask 的應用程式上下文中處理設定和連線生命週期。

延伸閱讀

TAG