← Назад к курсу
MongoDB в Python: демо-приложение
Мы создадим простое консольное приложение для управления задачами (To-Do List) с использованием MongoDB.
Шаги:
- Установим pymongo: `pip install pymongo`
- Запустим MongoDB (локально или используем облачный вариант, например, MongoDB Atlas). Для простоты будем использовать локальный сервер.
- Напишем приложение, которое позволит:
- Добавлять задачи
- Просматривать все задачи
- Отмечать задачи как выполненные
- Удалять задачи
Примечание: Для работы с локальным MongoDB, убедитесь, что сервер MongoDB запущен (обычно на localhost:27017).
Структура документа задачи:
{
"title": "Название задачи",
"description": "Описание задачи",
"done": false # статус выполнения
}
Код приложения:
Установка:
pip install pymongo
1. Основные операции
from pymongo import MongoClient
from bson.objectid import ObjectId
# Подключение (по умолчанию: localhost:27017)
client = MongoClient("mongodb://localhost:27017/")
db = client.task_database # Создаем БД
collection = db.tasks # Коллекция = таблица
# Вставка документа
task = {
"title": "Купить продукты",
"description": "Молоко, хлеб, яйца",
"done": False,
"tags": ["shopping", "urgent"]
}
insert_result = collection.insert_one(task)
print("ID новой задачи:", insert_result.inserted_id)
# Поиск
task = collection.find_one({"title": "Купить продукты"})
print(task)
# Обновление
collection.update_one(
{"_id": ObjectId(insert_result.inserted_id)},
{"$set": {"done": True}}
)
# Удаление
collection.delete_one({"done": True})
2. Демо-приложение: Менеджер задач (консольное)
from pymongo import MongoClient
import sys
# Инициализация MongoDB
client = MongoClient("mongodb://localhost:27017/")
db = client.task_manager
tasks = db.tasks
def add_task():
title = input("Название задачи: ")
description = input("Описание: ")
task = {"title": title, "description": description, "done": False}
tasks.insert_one(task)
print("✅ Задача добавлена!\n")
def list_tasks():
print("\n--- СПИСОК ЗАДАЧ ---")
for task in tasks.find():
status = "✓" if task.get("done") else "✗"
print(f"[{status}] {task['title']} (ID: {task['_id']})")
print("--------------------\n")
def complete_task():
task_id = input("Введите ID задачи: ")
tasks.update_one({"_id": ObjectId(task_id)}, {"$set": {"done": True}})
print("✔ Задача выполнена!\n")
def main():
while True:
print("1. Добавить задачу\n2. Список задач\n3. Отметить выполненной\n4. Выход")
choice = input("Выберите действие: ")
if choice == "1": add_task()
elif choice == "2": list_tasks()
elif choice == "3": complete_task()
elif choice == "4": sys.exit()
else: print("Ошибка ввода!\n")
if __name__ == "__main__":
main()
3. Запуск приложения
- Запустите MongoDB:
mongod # На Windows: запустите службу MongoDB
- Сохраните код в файл task_manager.py
- Запустите:
python task_manager.py
4. Особенности MongoDB для разработчика
- Динамическая схема:
# Можно добавить поле "deadline" без изменения схемы tasks.update_one({"_id": id}, {"$set": {"deadline": "2023-12-31"}}) - Индексация:
tasks.create_index("title") # Ускорение поиска по заголовку - Агрегации:
pipeline = [ {"$match": {"done": False}}, {"$group": {"_id": "$tags", "count": {"$sum": 1}}} ] print(list(tasks.aggregate(pipeline)))
5. Когда использовать MongoDB?
✅ Идеально для:
- Каталогов товаров (динамические атрибуты)
- Пользовательских профилей (разная структура)
- Логов приложений
- Контент-менеджмент (CMS)
❌ Не подходит для:
- Финансовых транзакций (требуются JOIN и ACID)
- Отчетности со сложными SQL-агрегациями
6. Советы по оптимизации
- Используйте проекции для выборки только нужных полей:
tasks.find({}, {"title": 1, "done": 1}) - Ограничивайте выборку:
tasks.find().limit(10)
- Настройте индексы для частых запросов.
Для промышленного использования:
- Используйте MongoDB Atlas для облачного развертывания
- Реализуйте обработку ошибок (try/except для операций с БД)
- Добавьте валидацию схемы через db.create_collection("tasks", validator={...})