🎯

mongodb-atlas

🎯Skill

from lobbi-docs/claude

VibeIndex|
What it does

Manages MongoDB Atlas cloud databases, enabling cluster configuration, schema design, query optimization, and Prisma ORM integration.

mongodb-atlas

Installation

Install skill:
npx skills add https://github.com/lobbi-docs/claude --skill mongodb-atlas
4
Last UpdatedJan 24, 2026

Skill Details

SKILL.md

MongoDB Atlas cloud database management including clusters, schemas, aggregation pipelines, and Prisma ORM integration. Activate for MongoDB queries, schema design, indexing, and Atlas administration.

Overview

# MongoDB Atlas Skill

Provides comprehensive MongoDB and MongoDB Atlas capabilities for the Alpha Members Platform.

When to Use This Skill

Activate this skill when working with:

  • MongoDB query development
  • Schema design and modeling
  • Aggregation pipelines
  • Index optimization
  • Prisma MongoDB integration
  • Atlas cluster management
  • Database performance tuning

Quick Reference

Docker Commands

```bash

# Start local MongoDB

docker-compose up mongodb -d

# Connect to MongoDB shell

docker exec -it mongodb mongosh -u root -p rootpassword

# Check MongoDB logs

docker logs mongodb -f --tail=100

```

MongoDB Shell Commands

```javascript

// Switch to database

use member_db

// List collections

show collections

// Find documents

db.members.find({ status: "ACTIVE" }).limit(10)

// Insert document

db.members.insertOne({ email: "test@example.com", status: "PENDING" })

// Update document

db.members.updateOne(

{ email: "test@example.com" },

{ $set: { status: "ACTIVE" } }

)

// Aggregation

db.members.aggregate([

{ $match: { status: "ACTIVE" } },

{ $group: { _id: "$profile.company", count: { $sum: 1 } } }

])

```

Connection Strings

```bash

# Local Docker

mongodb://root:rootpassword@localhost:27017/member_db?authSource=admin

# Atlas (example)

mongodb+srv://user:password@cluster.mongodb.net/member_db?retryWrites=true&w=majority

```

Schema Design

Prisma MongoDB Schema

```prisma

datasource db {

provider = "mongodb"

url = env("DATABASE_URL")

}

model Member {

id String @id @default(auto()) @map("_id") @db.ObjectId

keycloakUserId String @unique

email String @unique

firstName String

lastName String

status MemberStatus @default(PENDING)

profile MemberProfile? // Embedded

addresses MemberAddress[] // Embedded array

memberships Membership[] // Relation

createdAt DateTime @default(now())

updatedAt DateTime @updatedAt

@@index([status])

@@index([email])

}

type MemberProfile {

jobTitle String?

company String?

timezone String @default("UTC")

}

type MemberAddress {

type AddressType

street1 String

city String

state String

postalCode String

}

```

Collections

members

```javascript

{

_id: ObjectId("..."),

keycloakUserId: "uuid",

email: "user@example.com",

firstName: "John",

lastName: "Doe",

status: "ACTIVE",

profile: {

jobTitle: "Engineer",

company: "Acme Corp"

},

addresses: [

{ type: "HOME", street1: "123 Main St", ... }

],

createdAt: ISODate("..."),

updatedAt: ISODate("...")

}

```

memberships

```javascript

{

_id: ObjectId("..."),

memberId: ObjectId("..."),

type: "INDIVIDUAL",

level: "PREMIUM",

status: "ACTIVE",

startDate: ISODate("..."),

payment: {

method: "card",

amount: 99.99,

currency: "USD"

}

}

```

member_activities

```javascript

{

_id: ObjectId("..."),

memberId: ObjectId("..."),

action: "LOGIN",

category: "AUTH",

ipAddress: "192.168.1.1",

createdAt: ISODate("...")

}

```

Indexing

Recommended Indexes

```javascript

// Members collection

db.members.createIndex({ keycloakUserId: 1 }, { unique: true })

db.members.createIndex({ email: 1 }, { unique: true })

db.members.createIndex({ status: 1, createdAt: -1 })

db.members.createIndex({ "profile.company": 1 })

// Text search

db.members.createIndex({

firstName: "text",

lastName: "text",

email: "text",

"profile.company": "text"

})

// Memberships

db.memberships.createIndex({ memberId: 1 })

db.memberships.createIndex({ status: 1, endDate: 1 })

// Activities (with TTL)

db.member_activities.createIndex({ memberId: 1, createdAt: -1 })

db.member_activities.createIndex(

{ createdAt: 1 },

{ expireAfterSeconds: 31536000 } // 1 year TTL

)

```

Aggregation Pipelines

Member Statistics

```javascript

db.members.aggregate([

{ $facet: {

byStatus: [

{ $group: { _id: "$status", count: { $sum: 1 } } }

],

byMonth: [

{ $group: {

_id: { $dateToString: { format: "%Y-%m", date: "$createdAt" } },

count: { $sum: 1 }

}

},

{ $sort: { _id: 1 } }

],

total: [{ $count: "count" }]

}

}

])

```

Member with Memberships

```javascript

db.members.aggregate([

{ $match: { _id: ObjectId("...") } },

{ $lookup: {

from: "memberships",

localField: "_id",

foreignField: "memberId",

as: "memberships"

}

}

])

```

Prisma Operations

```typescript

// Find member

const member = await prisma.member.findUnique({

where: { email: "user@example.com" },

include: { memberships: true }

});

// Create member with embedded profile

const newMember = await prisma.member.create({

data: {

email: "new@example.com",

firstName: "Jane",

lastName: "Doe",

keycloakUserId: "uuid",

profile: {

jobTitle: "Manager",

company: "Acme"

}

}

});

// Update with push to array

const updated = await prisma.member.update({

where: { id: "..." },

data: {

addresses: {

push: {

type: "WORK",

street1: "456 Office Blvd",

city: "Boston",

state: "MA",

postalCode: "02102"

}

}

}

});

// Aggregation with Prisma

const stats = await prisma.member.groupBy({

by: ['status'],

_count: true

});

```

Performance Optimization

Query Optimization

```javascript

// Use projection to limit returned fields

db.members.find(

{ status: "ACTIVE" },

{ firstName: 1, lastName: 1, email: 1 }

)

// Use covered queries

db.members.find(

{ email: "user@example.com" },

{ _id: 0, email: 1, status: 1 }

).hint({ email: 1, status: 1 })

// Explain query plan

db.members.find({ status: "ACTIVE" }).explain("executionStats")

```

Index Analysis

```javascript

// Get index usage stats

db.members.aggregate([{ $indexStats: {} }])

// Find unused indexes

db.members.aggregate([

{ $indexStats: {} },

{ $match: { "accesses.ops": 0 } }

])

```

Atlas CLI Commands

```bash

# Login to Atlas

atlas auth login

# List clusters

atlas clusters list --projectId

# Create cluster

atlas clusters create alpha-dev \

--projectId \

--provider AWS \

--region US_EAST_1 \

--tier M10

# Get connection string

atlas clusters connectionStrings describe alpha-dev

```

Project Files

  • Prisma Schema: prisma/schema.prisma
  • MongoDB Init: infrastructure/mongo-init/01-init-db.js
  • Docker: docker/docker-compose.yml (mongodb service)

Related Agents

  • mongodb-atlas-admin - Cluster management
  • mongodb-schema-designer - Schema design
  • mongodb-query-optimizer - Performance tuning
  • mongodb-aggregation-specialist - Complex queries

Troubleshooting

```bash

# Check MongoDB connection

docker exec mongodb mongosh --eval "db.adminCommand('ping')"

# Check replication status

docker exec mongodb mongosh --eval "rs.status()"

# Analyze slow queries

db.setProfilingLevel(1, { slowms: 100 })

db.system.profile.find().sort({ millis: -1 }).limit(10)

```