MongoDB 與 MongoEngine¶
使用如 MongoDB 的文件資料庫是關聯式 SQL 資料庫常見的替代方案。此模式展示如何使用文件映射器函式庫 MongoEngine 與 MongoDB 整合。
需要一個正在運行的 MongoDB 伺服器和 Flask-MongoEngine。
pip install flask-mongoengine
設定¶
基本設定可以透過在 app.config
上定義 MONGODB_SETTINGS
並建立一個 MongoEngine
實例來完成。
from flask import Flask
from flask_mongoengine import MongoEngine
app = Flask(__name__)
app.config['MONGODB_SETTINGS'] = {
"db": "myapp",
}
db = MongoEngine(app)
映射文件¶
要宣告一個代表 Mongo 文件的模型,請建立一個繼承自 Document
的類別,並宣告每個欄位。
import mongoengine as me
class Movie(me.Document):
title = me.StringField(required=True)
year = me.IntField()
rated = me.StringField()
director = me.StringField()
actors = me.ListField()
如果文件有巢狀欄位,請使用 EmbeddedDocument
來定義嵌入式文件的欄位,並使用 EmbeddedDocumentField
在父文件中宣告它。
class Imdb(me.EmbeddedDocument):
imdb_id = me.StringField()
rating = me.DecimalField()
votes = me.IntField()
class Movie(me.Document):
...
imdb = me.EmbeddedDocumentField(Imdb)
建立資料¶
使用欄位的關鍵字參數來實例化您的文件類別。您也可以在實例化後將值指派給欄位屬性。然後呼叫 doc.save()
。
bttf = Movie(title="Back To The Future", year=1985)
bttf.actors = [
"Michael J. Fox",
"Christopher Lloyd"
]
bttf.imdb = Imdb(imdb_id="tt0088763", rating=8.5)
bttf.save()
查詢¶
使用類別 objects
屬性來進行查詢。關鍵字參數會在欄位中尋找相等的值。
bttf = Movies.objects(title="Back To The Future").get_or_404()
查詢運算子可以透過使用雙底線將它們與欄位名稱串連來使用。objects
,以及透過呼叫它返回的查詢,是可迭代的。
some_theron_movie = Movie.objects(actors__in=["Charlize Theron"]).first()
for recents in Movie.objects(year__gte=2017):
print(recents.title)
文件¶
使用 MongoEngine 定義和查詢文件還有許多其他方法。有關更多資訊,請查看官方文件。
Flask-MongoEngine 在 MongoEngine 之上添加了有用的工具。也請查看他們的文件。