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

⚡ Суть задания

В домашнем задании нужно подключиться к MongoDB, очистить коллекцию товаров, добавить 3 товара, увеличить их цены на 20% и вывести результат.

Результат: работающий скрипт, который выводит количество вставленных и обновлённых документов, а также список товаров с новыми ценами.

📋 Формулировка задания

Исходное задание из LMS:

1. Добавление товаров. Создайте программу, которая подключается к MongoDB и:

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

Пример вывода: 3 products inserted.

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

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

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

Prices updated for 3 products.
Updated products:
- Pen — $1.80
- Notebook — $4.79
- Backpack — $30.00

🔧 Шаг 0. Подготовка окружения

Перед началом работы убедитесь, что MongoDB установлена и запущена, а в активном окружении Python установлен пакет pymongo.

1

Создайте папку для урока

Внутри рабочей папки курса создайте директорию для текущего урока:

mkdir -p databases/lesson-87
cd databases/lesson-87
2

Создайте и активируйте виртуальное окружение

# Windows
python -m venv venv
venv\Scripts\activate

# Mac / Linux
python3 -m venv venv
source venv/bin/activate
3

Установите зависимости

pip install pymongo

# для работы с MySQL также полезен PyMySQL
pip install pymysql

pip freeze > requirements.txt

🛠️ Шаги выполнения задания

1

Создайте файл homework.py

Создайте файл в папке databases/lesson-87/ и импортируйте MongoClient.

from pymongo import MongoClient


def main():
    client = MongoClient("mongodb://localhost:27017")
    db = client["ich_edit"]
    collection = db["products_pd_ivanov"]
    # дальнейший код будет здесь
    client.close()


if __name__ == "__main__":
    main()

Важно: замените pd_ivanov в имени коллекции на свою группу и фамилию.

2

Очистите коллекцию и добавьте 3 товара

collection.delete_many({})

products = [
    {"name": "Pen", "price": 1.50, "stock": 100},
    {"name": "Notebook", "price": 3.99, "stock": 50},
    {"name": "Backpack", "price": 25.00, "stock": 20},
]

insert_result = collection.insert_many(products)
print(f"{len(insert_result.inserted_ids)} products inserted.")
3

Увеличьте цены на 20%

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

print("Updated products:")
for product in collection.find({}, {"_id": 0, "name": 1, "price": 1}):
    print(f"- {product['name']} — ${product['price']:.2f}")

Проверка: цена Pen должна стать 1.80, Notebook — 4.79, Backpack — 30.00.

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

Ниже приведён полный скрипт. Попробуйте собрать его самостоятельно, прежде чем копировать.

from pymongo import MongoClient


def main():
    # Подключение к MongoDB
    with MongoClient("mongodb://localhost:27017") as client:
        db = client["ich_edit"]
        # Замените pd_ivanov на свою группу и фамилию
        collection = db["products_pd_ivanov"]

        # 1. Очистка коллекции
        collection.delete_many({})

        # 2. Добавление товаров
        products = [
            {"name": "Pen", "price": 1.50, "stock": 100},
            {"name": "Notebook", "price": 3.99, "stock": 50},
            {"name": "Backpack", "price": 25.00, "stock": 20},
        ]
        insert_result = collection.insert_many(products)
        print(f"{len(insert_result.inserted_ids)} products inserted.")

        # 3. Увеличение цен на 20%
        update_result = collection.update_many({}, {"$mul": {"price": 1.2}})
        print(f"Prices updated for {update_result.modified_count} products.")

        # 4. Вывод обновлённых товаров
        print("Updated products:")
        for product in collection.find({}, {"_id": 0, "name": 1, "price": 1}):
            print(f"- {product['name']} — ${product['price']:.2f}")


if __name__ == "__main__":
    main()

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

  1. Убедитесь, что сервер MongoDB запущен (например, служба mongod).
  2. Активируйте venv: venv\Scripts\activate (Windows) или source venv/bin/activate (Mac/Linux).
  3. Запустите файл: python homework.py.
  4. Проверьте вывод — он должен соответствовать примеру из задания.
  5. Убедитесь, что в коллекции ровно 3 документа и цены увеличены на 20%.

🐛 Отладка

Если что-то не работает:

  • Проверьте, что MongoDB доступна по адресу localhost:27017.
  • Убедитесь, что пакет pymongo установлен в активном виртуальном окружении.
  • Если выводится не 3 товара, проверьте, не пропущен ли delete_many({}).
  • Если цены не изменились, проверьте, что вы используете оператор $mul, а не просто присваиваете поле.

💾 Сохранение работы

git add databases/lesson-87/
git commit -m "lesson-87: MongoDB — добавление товаров и обновление цен"
git push