Skip to content

MongoDB with PyMongo (Python)

Uses PyMongo 4.19. The code is an ordinary application for the original database; nothing in it knows about MachNoSQL.

mongodb://app:secret@mongo.example.com:27017/shop?authSource=admin
mongodb://app:secret@machnosql.example.com:27017/shop?authSource=admin

The address comes from the environment variable MONGODB_URI, so switching to MachNoSQL changes configuration only.

Terminal window
export MONGODB_URI='mongodb://app:secret@machnosql.example.com:27017/shop?authSource=admin'
pip install -r requirements.txt
python app.py

The program as it is kept and tested in the Mach Database NoSQL repository; highlighted lines read the connection setting.

app.py
"""Orders example for MongoDB, unchanged on MachNoSQL."""
import os
from pymongo import MongoClient
client = MongoClient(os.environ["MONGODB_URI"])
orders = client.get_default_database()["orders"]
orders.delete_many({})
orders.insert_many(
[
{"customer": "ada", "item": "keyboard", "qty": 1, "price": 49.0},
{"customer": "ada", "item": "mouse", "qty": 2, "price": 19.5},
{"customer": "linus", "item": "monitor", "qty": 1, "price": 199.0},
]
)
orders.create_index("customer")
print(orders.find_one({"item": "mouse"}, {"_id": 0}))
orders.update_one({"item": "mouse"}, {"$inc": {"qty": 1}})
pipeline = [
{"$group": {"_id": "$customer", "revenue": {"$sum": {"$multiply": ["$qty", "$price"]}}}},
{"$sort": {"revenue": -1}},
]
for row in orders.aggregate(pipeline):
print(row)
requirements.txt
pymongo==4.19.0