mongodb-atlas
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMongoDB Atlas Skill
MongoDB Atlas Skill
Provides comprehensive MongoDB and MongoDB Atlas capabilities for the Alpha Members Platform.
为Alpha Members平台提供全面的MongoDB和MongoDB Atlas功能支持。
When to Use This Skill
何时使用该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
在进行以下操作时激活此Skill:
- MongoDB查询开发
- 模式设计与建模
- 聚合管道开发
- 索引优化
- Prisma MongoDB集成
- Atlas集群管理
- 数据库性能调优
Quick Reference
快速参考
Docker Commands
Docker 命令
bash
undefinedbash
undefinedStart local MongoDB
启动本地MongoDB
docker-compose up mongodb -d
docker-compose up mongodb -d
Connect to MongoDB shell
连接到MongoDB Shell
docker exec -it mongodb mongosh -u root -p rootpassword
docker exec -it mongodb mongosh -u root -p rootpassword
Check MongoDB logs
查看MongoDB日志
docker logs mongodb -f --tail=100
undefineddocker logs mongodb -f --tail=100
undefinedMongoDB Shell Commands
MongoDB Shell 命令
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 } } }
])javascript
// 切换数据库
use member_db
// 列出集合
show collections
// 查询文档
db.members.find({ status: "ACTIVE" }).limit(10)
// 插入文档
db.members.insertOne({ email: "test@example.com", status: "PENDING" })
// 更新文档
db.members.updateOne(
{ email: "test@example.com" },
{ $set: { status: "ACTIVE" } }
)
// 聚合查询
db.members.aggregate([
{ $match: { status: "ACTIVE" } },
{ $group: { _id: "$profile.company", count: { $sum: 1 } } }
])Connection Strings
连接字符串
bash
undefinedbash
undefinedLocal Docker
本地Docker环境
mongodb://root:rootpassword@localhost:27017/member_db?authSource=admin
mongodb://root:rootpassword@localhost:27017/member_db?authSource=admin
Atlas (example)
Atlas示例
mongodb+srv://user:password@cluster.mongodb.net/member_db?retryWrites=true&w=majority
undefinedmongodb+srv://user:password@cluster.mongodb.net/member_db?retryWrites=true&w=majority
undefinedSchema Design
模式设计
Prisma MongoDB Schema
Prisma MongoDB 模式
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
}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? // 嵌入式文档
addresses MemberAddress[] // 嵌入式数组
memberships Membership[] // 关联关系
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
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("...")
}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
memberships集合
javascript
{
_id: ObjectId("..."),
memberId: ObjectId("..."),
type: "INDIVIDUAL",
level: "PREMIUM",
status: "ACTIVE",
startDate: ISODate("..."),
payment: {
method: "card",
amount: 99.99,
currency: "USD"
}
}javascript
{
_id: ObjectId("..."),
memberId: ObjectId("..."),
type: "INDIVIDUAL",
level: "PREMIUM",
status: "ACTIVE",
startDate: ISODate("..."),
payment: {
method: "card",
amount: 99.99,
currency: "USD"
}
}member_activities
member_activities集合
javascript
{
_id: ObjectId("..."),
memberId: ObjectId("..."),
action: "LOGIN",
category: "AUTH",
ipAddress: "192.168.1.1",
createdAt: ISODate("...")
}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
)javascript
// Members集合索引
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 })
// 全文搜索索引
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集合(带TTL)
db.member_activities.createIndex({ memberId: 1, createdAt: -1 })
db.member_activities.createIndex(
{ createdAt: 1 },
{ expireAfterSeconds: 31536000 } // 1年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" }]
}
}
])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"
}
}
])javascript
db.members.aggregate([
{ $match: { _id: ObjectId("...") } },
{ $lookup: {
from: "memberships",
localField: "_id",
foreignField: "memberId",
as: "memberships"
}
}
])Prisma Operations
Prisma 操作示例
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
});typescript
// 查询会员
const member = await prisma.member.findUnique({
where: { email: "user@example.com" },
include: { memberships: true }
});
// 创建带嵌入式profile的会员
const newMember = await prisma.member.create({
data: {
email: "new@example.com",
firstName: "Jane",
lastName: "Doe",
keycloakUserId: "uuid",
profile: {
jobTitle: "Manager",
company: "Acme"
}
}
});
// 向数组添加元素
const updated = await prisma.member.update({
where: { id: "..." },
data: {
addresses: {
push: {
type: "WORK",
street1: "456 Office Blvd",
city: "Boston",
state: "MA",
postalCode: "02102"
}
}
}
});
// 使用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")javascript
// 使用投影限制返回字段
db.members.find(
{ status: "ACTIVE" },
{ firstName: 1, lastName: 1, email: 1 }
)
// 使用覆盖查询
db.members.find(
{ email: "user@example.com" },
{ _id: 0, email: 1, status: 1 }
).hint({ email: 1, status: 1 })
// 查看查询执行计划
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 } }
])javascript
// 获取索引使用统计
db.members.aggregate([{ $indexStats: {} }])
// 查找未使用的索引
db.members.aggregate([
{ $indexStats: {} },
{ $match: { "accesses.ops": 0 } }
])Atlas CLI Commands
Atlas CLI 命令
bash
undefinedbash
undefinedLogin to Atlas
登录Atlas
atlas auth login
atlas auth login
List clusters
列出集群
atlas clusters list --projectId <projectId>
atlas clusters list --projectId <projectId>
Create cluster
创建集群
atlas clusters create alpha-dev
--projectId <projectId>
--provider AWS
--region US_EAST_1
--tier M10
--projectId <projectId>
--provider AWS
--region US_EAST_1
--tier M10
atlas clusters create alpha-dev
--projectId <projectId>
--provider AWS
--region US_EAST_1
--tier M10
--projectId <projectId>
--provider AWS
--region US_EAST_1
--tier M10
Get connection string
获取连接字符串
atlas clusters connectionStrings describe alpha-dev
undefinedatlas clusters connectionStrings describe alpha-dev
undefinedProject Files
项目文件
- Prisma Schema:
prisma/schema.prisma - MongoDB Init:
infrastructure/mongo-init/01-init-db.js - Docker: (mongodb service)
docker/docker-compose.yml
- Prisma 模式文件:
prisma/schema.prisma - MongoDB 初始化脚本:
infrastructure/mongo-init/01-init-db.js - Docker 配置: (mongodb服务)
docker/docker-compose.yml
Related Agents
相关Agent
- mongodb-atlas-admin - Cluster management
- mongodb-schema-designer - Schema design
- mongodb-query-optimizer - Performance tuning
- mongodb-aggregation-specialist - Complex queries
- mongodb-atlas-admin - 集群管理
- mongodb-schema-designer - 模式设计
- mongodb-query-optimizer - 性能调优
- mongodb-aggregation-specialist - 复杂查询
Troubleshooting
故障排查
bash
undefinedbash
undefinedCheck MongoDB connection
检查MongoDB连接
docker exec mongodb mongosh --eval "db.adminCommand('ping')"
docker exec mongodb mongosh --eval "db.adminCommand('ping')"
Check replication status
检查复制状态
docker exec mongodb mongosh --eval "rs.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)
undefineddb.setProfilingLevel(1, { slowms: 100 })
db.system.profile.find().sort({ millis: -1 }).limit(10)
undefined