Amazon DocumentDB (with MongoDB compatibility)

Hands-On

Demo

In this demo, we will:

  1. Create a VPC and configure networking for DocumentDB
  2. Launch an Amazon DocumentDB cluster with read replicas
  3. Set up AWS Cloud9 environment for database access
  4. Connect to DocumentDB and create a product catalog database
  5. Perform CRUD operations and queries on product data
  6. 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