Урок 84. MongoDB и Python. Модули

📁 Блок: Базы данных и модули ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#close #find #sort #list #in #import #from

⚡ Кратко: домашнее задание

  1. Создай программу, которая подключается к MongoDB, выбирает базу ich_edit и коллекцию products_<group>_<name>.
  2. Очисти коллекцию, добавь 3 товара с полями name, price, stock и выведи количество добавленных товаров.
  3. Увеличь цену всех товаров на 20%, выведи количество обновлённых записей и список товаров с новыми ценами.

🏠 Домашнее задание из LMS

1

Добавление товаров

Создайте программу, которая подключается к MongoDB и:

  • выбирает базу ich_edit и коллекцию products_<your_group>_<your_full_name>;
  • очищает коллекцию перед началом;
  • добавляет 3 товара с полями: name, price, stock;
  • выводит сообщение о количестве добавленных товаров.

Пример вывода:

3 products added.
2

Увеличение цен

Продолжите предыдущую задачу. Теперь программа должна:

  • увеличить цену всех товаров на 20%;
  • вывести количество обновлённых записей;
  • затем вывести список всех товаров с новыми ценами.

Пример вывода:

3 products updated.
Notebook — 12.0
Pencil — 1.2
Bag — 30.0

🛠️ Подготовка окружения

  1. Убедитесь, что установлен Python 3.
  2. Установите библиотеку PyMongo:
    pip install pymongo
  3. Получите строку подключения к MongoDB (логин, пароль, хост и authSource).
  4. Создайте новый файл, например homework_84.py, в VS Code.

📝 Пошаговое решение

1

Подключение и выбор коллекции

from pymongo import MongoClient

# main.py
client = MongoClient(
    "mongodb://ich_editor:verystrongpassword"
    "@mongo.itcareerhub.de/?readPreference=primary"
    "&ssl=false&authMechanism=DEFAULT&authSource=ich_edit"
)

db = client["ich_edit"]
products = db["products_pd_ivanov"]  # замените на свою группу и фамилию
2

Очистка и добавление товаров

products.delete_many({})  # очищаем коллекцию

items = [
    {"name": "Notebook", "price": 10.00, "stock": 50},
    {"name": "Pencil", "price": 1.00, "stock": 100},
    {"name": "Bag", "price": 25.00, "stock": 30},
]

result = products.insert_many(items)
print(f"{len(result.inserted_ids)} products added.")
3

Увеличение цен на 20%

update_result = products.update_many(
    {},
    {"$mul": {"price": 1.2}}
)
print(f"{update_result.modified_count} products updated.")

print("\nUpdated products:")
for item in products.find({}, {"_id": 0, "name": 1, "price": 1}):
    print(f"{item['name']} — {item['price']:.2f}")
⚠️ Проверить по документации: в официальном конспекте используется UPDATE products SET price = price * 1.2. В MongoDB эквивалент — оператор $mul. Можно также прочитать документы, изменить price в Python и использовать $set, но $mul делает это атомарно на сервере.

✅ Полное решение

# homework_84.py
from pymongo import MongoClient


def main() -> None:
    client = MongoClient(
        "mongodb://ich_editor:verystrongpassword"
        "@mongo.itcareerhub.de/?readPreference=primary"
        "&ssl=false&authMechanism=DEFAULT&authSource=ich_edit"
    )

    db = client["ich_edit"]
    products = db["products_pd_ivanov"]

    products.delete_many({})

    items = [
        {"name": "Notebook", "price": 10.00, "stock": 50},
        {"name": "Pencil", "price": 1.00, "stock": 100},
        {"name": "Bag", "price": 25.00, "stock": 30},
    ]

    insert_result = products.insert_many(items)
    print(f"{len(insert_result.inserted_ids)} products added.")

    update_result = products.update_many({}, {"$mul": {"price": 1.2}})
    print(f"{update_result.modified_count} products updated.")

    print("\nUpdated products:")
    for item in products.find({}, {"_id": 0, "name": 1, "price": 1}):
        print(f"{item['name']} — {item['price']:.2f}")

    client.close()


if __name__ == "__main__":
    main()

🔍 Проверка в VS Code

  1. Откройте файл homework_84.py в VS Code.
  2. Проверьте, что виртуальное окружение активировано и установлен pymongo.
  3. Запустите скрипт через терминал:
    python homework_84.py
  4. Убедитесь, что в консоли появились:
    • 3 products added.
    • 3 products updated.
    • список товаров с ценами, увеличенными на 20%.