📋 Формулировка задания
Исходное задание из 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.
Создайте папку для урока
Внутри рабочей папки курса создайте директорию для текущего урока:
mkdir -p databases/lesson-87
cd databases/lesson-87
Создайте и активируйте виртуальное окружение
# Windows
python -m venv venv
venv\Scripts\activate
# Mac / Linux
python3 -m venv venv
source venv/bin/activate
Установите зависимости
pip install pymongo
# для работы с MySQL также полезен PyMySQL
pip install pymysql
pip freeze > requirements.txt
🛠️ Шаги выполнения задания
Создайте файл 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 в имени коллекции на свою группу и фамилию.
Очистите коллекцию и добавьте 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.")
Увеличьте цены на 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
- Убедитесь, что сервер MongoDB запущен (например, служба
mongod). - Активируйте venv:
venv\Scripts\activate(Windows) илиsource venv/bin/activate(Mac/Linux). - Запустите файл:
python homework.py. - Проверьте вывод — он должен соответствовать примеру из задания.
- Убедитесь, что в коллекции ровно 3 документа и цены увеличены на 20%.
🐛 Отладка
Если что-то не работает:
- Проверьте, что MongoDB доступна по адресу
localhost:27017. - Убедитесь, что пакет
pymongoустановлен в активном виртуальном окружении. - Если выводится не 3 товара, проверьте, не пропущен ли
delete_many({}). - Если цены не изменились, проверьте, что вы используете оператор
$mul, а не просто присваиваете поле.
💾 Сохранение работы
git add databases/lesson-87/
git commit -m "lesson-87: MongoDB — добавление товаров и обновление цен"
git push