- en
 - Language: ru
 
- Documentation version: 1.1.x
 
MongoDB с MongoEngine¶
Использование базы данных документов, такой как MongoDB, является распространенной альтернативой реляционным базам данных SQL. Этот шаблон показывает, как использовать MongoEngine, библиотеку отображения документов, для интеграции с MongoDB.
Требуется работающий сервер MongoDB и Flask-MongoEngine.
pip install flask-mongoengine
Конфигурация¶
Базовая настройка может быть выполнена путем определения MONGODB_SETTINGS на app.config и создания экземпляра 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)
Создание данных¶
I
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()
I¶
Используйте атрибут class 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. Для получения дополнительной информации ознакомьтесь с official documentation.
Flask-MongoEngine добавляет полезные утилиты поверх MongoEngine. Ознакомьтесь также с их documentation.