Amazon DocumentDB (with MongoDB compatibility)
Hands-On
Demo

In this demo, we will:
- Create a VPC and configure networking for DocumentDB
- Launch an Amazon DocumentDB cluster with read replicas
- Set up AWS Cloud9 environment for database access
- Connect to DocumentDB and create a product catalog database
- Perform CRUD operations and queries on product data
- Clean up resources
Agenda
Step 1: Create VPC and Configure Networking

Create VPC

documentdb-demo-vpc
10.0.0.0/16
Create VPC




Other Settings

DNS options


View VPC

documentdb-demo-vpc-vpc

documentdb-demo-vpc-subnet-private1-us-east-1a

documentdb-demo-vpc-subnet-private2-us-east-1b

Enable auto-assign public IPv4 address in Public Subnet us-east-1a

Create a subnet group for DocumentDB

Create subnet group
documentdb-subnet-group
Subnet group for DocumentDB demo

documentdb-demo-vpc

Successfully created subnet group 'documentdb-subnet-group'.
Step 2: Create Security Groups


Security Groups

documentdb-sg
Security group for DocumentDB cluster
documentdb-demo-vpc
Create security group

Inbound rules


Create security group

Security group (sg-00cf98be25be75ca9 | documentdb-sg) was created successfully

Create security group for Cloud9/Client
documentdb-client-sg
Security group for DocumentDB clients
documentdb-demo-vpc

Create security group

Security group was created successfully

Update DocumentDB security group to allow connections


Update DocumentDB security group to allow connections

Inbound security group rules successfully modified on security group
Step 3: Launch Amazon DocumentDB Cluster

Navigate to Amazon DocumentDB service

Create Amazon DocumentDB cluster
product-catalog-cluster

Instance configuration

Cluster storage configuration

Connectivity

Authentication
docdbadmin

Network settings
documentdb-demo-vpc
documentdb-subnet-group
documentdb-sg




Cluster options
27017

Encryption-at-rest

Backup

Performance Insights

Maintenance

Wait 10-15 minutes for cluster creation
Step 4: Set Up AWS Cloud9 Environment



documentdb-client
Cloud9 environment for DocumentDB access
Create environment

New EC2 instance

Network settings
documentdb-demo-vpc
Subnet: Select a public subnet

Tags - optional

Update Cloud9 instance security group

EC2 Instances

EC2 Instances

Add security group

Add security group

Add security group
Step 5: Connect to DocumentDB and Install Tools

Successfully created documentdb-client

# Download MongoDB shell
wget https://downloads.mongodb.com/compass/mongodb-mongosh-1.10.0.x86_64.rpm


# Install the shell
sudo yum install -y mongodb-mongosh-1.10.0.x86_64.rpm

mongosh --version

wget https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem

CLUSTER_ENDPOINT=

mongosh --host ${CLUSTER_ENDPOINT}:27017 \
--username docdbadmin \
--password docdbadmin \
--tls \
--tlsCAFile global-bundle.pem

Edit inbound rules of Document-DB SG

Inbound security group rules successfully modified

Successful Connection
Step 6: Create Collection and Perform CRUD Operations
// Switch to product catalog database
use productCatalog
// Create products collection with validation
db.createCollection("products", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "category", "price", "inventory"],
properties: {
name: {
bsonType: "string",
description: "Product name is required"
},
category: {
bsonType: "string",
description: "Product category is required"
},
price: {
bsonType: "decimal",
minimum: 0,
description: "Price must be a positive decimal"
},
inventory: {
bsonType: "int",
minimum: 0,
description: "Inventory must be non-negative integer"
}
}
}
}
})
Create the product catalog database and collection
// Insert multiple products
db.products.insertMany([
{
name: "Wireless Headphones",
category: "Electronics",
subcategory: "Audio",
price: NumberDecimal("79.99"),
inventory: NumberInt(150),
brand: "TechAudio",
features: ["Bluetooth 5.0", "Noise Cancellation", "30-hour battery"],
ratings: {
average: 4.5,
count: 234
},
dateAdded: new Date()
},
{
name: "Yoga Mat Premium",
category: "Sports",
subcategory: "Fitness",
price: NumberDecimal("29.99"),
inventory: NumberInt(85),
brand: "FitGear",
features: ["Non-slip", "Extra thick", "Eco-friendly"],
ratings: {
average: 4.8,
count: 89
},
dateAdded: new Date()
},
{
name: "Smart Watch Pro",
category: "Electronics",
subcategory: "Wearables",
price: NumberDecimal("249.99"),
inventory: NumberInt(42),
brand: "TechTime",
features: ["Heart rate monitor", "GPS", "Water resistant"],
ratings: {
average: 4.3,
count: 567
},
dateAdded: new Date()
},
{
name: "Organic Coffee Beans",
category: "Food",
subcategory: "Beverages",
price: NumberDecimal("15.99"),
inventory: NumberInt(200),
brand: "GreenBean",
features: ["Fair trade", "Single origin", "Medium roast"],
ratings: {
average: 4.7,
count: 123
},
dateAdded: new Date()
}
])
Insert sample product data
// Create single field indexes
db.products.createIndex({ category: 1 })
db.products.createIndex({ price: 1 })
db.products.createIndex({ "ratings.average": -1 })
// Create compound index
db.products.createIndex({ category: 1, price: -1 })
// Create text index for search
db.products.createIndex({ name: "text", brand: "text" })
// View all indexes
db.products.getIndexes()
Create indexes for performance optimization
// Find all electronics under $100
db.products.find({
category: "Electronics",
price: { $lt: 100 }
}).pretty()
// Find top-rated products (rating > 4.5)
db.products.find({
"ratings.average": { $gt: 4.5 }
}).sort({ "ratings.average": -1 }).pretty()
// Text search
db.products.find({
$text: { $search: "Smart" }
}).pretty()
// Aggregation pipeline - Category summary
db.products.aggregate([
{
$group: {
_id: "$category",
avgPrice: { $avg: "$price" },
totalInventory: { $sum: "$inventory" },
productCount: { $sum: 1 }
}
},
{
$sort: { totalInventory: -1 }
}
])
Perform queries
// Update single document - Apply discount
db.products.updateOne(
{ name: "Wireless Headphones" },
{
$mul: { price: 0.9 }, // 10% discount
$set: { onSale: true, lastModified: new Date() }
}
)
// Update multiple documents - Increase inventory
db.products.updateMany(
{ category: "Electronics" },
{ $inc: { inventory: 10 } }
)
Update operations

Clean Up

Delete DocumentDB clusters


Delete DocumentDB clusters

Delete Cloud9 environment

Delete VPC



Delete security groups

Delete Network interfaces


EC2 Instances

Delete Subnet groups
🙏
Thanks
for
Watching
Amazon DocumentDB (with MongoDB compatibility) - Hands-On Demo
By Deepak Dubey
Amazon DocumentDB (with MongoDB compatibility) - Hands-On Demo
Amazon DocumentDB (with MongoDB compatibility) - Hands-On Demo
- 17