databases
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseDatabases Skill
数据库技能
Unified guide for working with MongoDB (document-oriented) and PostgreSQL (relational) databases. Choose the right database for your use case and master both systems.
MongoDB(面向文档型)与PostgreSQL(关系型)数据库的统一使用指南。根据你的使用场景选择合适的数据库,并精通这两种系统。
When to Use This Skill
何时使用本技能
Use when:
- Designing database schemas and data models
- Writing queries (SQL or MongoDB query language)
- Building aggregation pipelines or complex joins
- Optimizing indexes and query performance
- Implementing database migrations
- Setting up replication, sharding, or clustering
- Configuring backups and disaster recovery
- Managing database users and permissions
- Analyzing slow queries and performance issues
- Administering production database deployments
适用于以下场景:
- 设计数据库模式与数据模型
- 编写查询语句(SQL或MongoDB查询语言)
- 构建聚合管道或复杂关联查询
- 优化索引与查询性能
- 实施数据库迁移
- 设置复制、分片或集群
- 配置备份与灾难恢复
- 管理数据库用户与权限
- 分析慢查询与性能问题
- 管理生产环境数据库部署
Database Selection Guide
数据库选择指南
Choose MongoDB When:
选择MongoDB的场景:
- Schema flexibility: frequent structure changes, heterogeneous data
- Document-centric: natural JSON/BSON data model
- Horizontal scaling: need to shard across multiple servers
- High write throughput: IoT, logging, real-time analytics
- Nested/hierarchical data: embedded documents preferred
- Rapid prototyping: schema evolution without migrations
Best for: Content management, catalogs, IoT time series, real-time analytics, mobile apps, user profiles
- 模式灵活性:数据结构频繁变更、异构数据
- 文档中心型:天然适配JSON/BSON数据模型
- 水平扩展:需要跨多台服务器分片
- 高写入吞吐量:物联网、日志、实时分析
- 嵌套/层级数据:优先使用嵌入式文档
- 快速原型开发:无需迁移即可实现模式演进
最佳适用场景: 内容管理、目录系统、物联网时间序列数据、实时分析、移动应用、用户画像
Choose PostgreSQL When:
选择PostgreSQL的场景:
- Strong consistency: ACID transactions critical
- Complex relationships: many-to-many joins, referential integrity
- SQL requirement: team expertise, reporting tools, BI systems
- Data integrity: strict schema validation, constraints
- Mature ecosystem: extensive tooling, extensions
- Complex queries: window functions, CTEs, analytical workloads
Best for: Financial systems, e-commerce transactions, ERP, CRM, data warehousing, analytics
- 强一致性:ACID事务至关重要
- 复杂关系:多对多关联、引用完整性
- SQL需求:团队具备SQL经验、报表工具、BI系统
- 数据完整性:严格的模式验证、约束
- 成熟生态系统:丰富的工具与扩展
- 复杂查询:窗口函数、CTE、分析型工作负载
最佳适用场景: 金融系统、电商交易、ERP、CRM、数据仓库、分析系统
Both Support:
两者均支持:
- JSON/JSONB storage and querying
- Full-text search capabilities
- Geospatial queries and indexing
- Replication and high availability
- ACID transactions (MongoDB 4.0+)
- Strong security features
- JSON/JSONB存储与查询
- 全文搜索功能
- 地理空间查询与索引
- 复制与高可用
- ACID事务(MongoDB 4.0+)
- 强大的安全特性
Quick Start
快速开始
MongoDB Setup
MongoDB 安装配置
bash
undefinedbash
undefinedAtlas (Cloud) - Recommended
Atlas(云服务)- 推荐
1. Sign up at mongodb.com/atlas
1. 在mongodb.com/atlas注册账号
2. Create M0 free cluster
2. 创建M0免费集群
3. Get connection string
3. 获取连接字符串
Connection
连接
mongodb+srv://user:pass@cluster.mongodb.net/db
mongodb+srv://user:pass@cluster.mongodb.net/db
Shell
命令行客户端
mongosh "mongodb+srv://cluster.mongodb.net/mydb"
mongosh "mongodb+srv://cluster.mongodb.net/mydb"
Basic operations
基础操作
db.users.insertOne({ name: "Alice", age: 30 })
db.users.find({ age: { $gte: 18 } })
db.users.updateOne({ name: "Alice" }, { $set: { age: 31 } })
db.users.deleteOne({ name: "Alice" })
undefineddb.users.insertOne({ name: "Alice", age: 30 })
db.users.find({ age: { $gte: 18 } })
db.users.updateOne({ name: "Alice" }, { $set: { age: 31 } })
db.users.deleteOne({ name: "Alice" })
undefinedPostgreSQL Setup
PostgreSQL 安装配置
bash
undefinedbash
undefinedUbuntu/Debian
Ubuntu/Debian系统
sudo apt-get install postgresql postgresql-contrib
sudo apt-get install postgresql postgresql-contrib
Start service
启动服务
sudo systemctl start postgresql
sudo systemctl start postgresql
Connect
连接数据库
psql -U postgres -d mydb
psql -U postgres -d mydb
Basic operations
基础操作
CREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT, age INT);
INSERT INTO users (name, age) VALUES ('Alice', 30);
SELECT * FROM users WHERE age >= 18;
UPDATE users SET age = 31 WHERE name = 'Alice';
DELETE FROM users WHERE name = 'Alice';
undefinedCREATE TABLE users (id SERIAL PRIMARY KEY, name TEXT, age INT);
INSERT INTO users (name, age) VALUES ('Alice', 30);
SELECT * FROM users WHERE age >= 18;
UPDATE users SET age = 31 WHERE name = 'Alice';
DELETE FROM users WHERE name = 'Alice';
undefinedCommon Operations
常见操作
Create/Insert
创建/插入
javascript
// MongoDB
db.users.insertOne({ name: "Bob", email: "bob@example.com" })
db.users.insertMany([{ name: "Alice" }, { name: "Charlie" }])sql
-- PostgreSQL
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
INSERT INTO users (name, email) VALUES ('Alice', NULL), ('Charlie', NULL);javascript
// MongoDB
db.users.insertOne({ name: "Bob", email: "bob@example.com" })
db.users.insertMany([{ name: "Alice" }, { name: "Charlie" }])sql
-- PostgreSQL
INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com');
INSERT INTO users (name, email) VALUES ('Alice', NULL), ('Charlie', NULL);Read/Query
读取/查询
javascript
// MongoDB
db.users.find({ age: { $gte: 18 } })
db.users.findOne({ email: "bob@example.com" })sql
-- PostgreSQL
SELECT * FROM users WHERE age >= 18;
SELECT * FROM users WHERE email = 'bob@example.com' LIMIT 1;javascript
// MongoDB
db.users.find({ age: { $gte: 18 } })
db.users.findOne({ email: "bob@example.com" })sql
-- PostgreSQL
SELECT * FROM users WHERE age >= 18;
SELECT * FROM users WHERE email = 'bob@example.com' LIMIT 1;Update
更新
javascript
// MongoDB
db.users.updateOne({ name: "Bob" }, { $set: { age: 25 } })
db.users.updateMany({ status: "pending" }, { $set: { status: "active" } })sql
-- PostgreSQL
UPDATE users SET age = 25 WHERE name = 'Bob';
UPDATE users SET status = 'active' WHERE status = 'pending';javascript
// MongoDB
db.users.updateOne({ name: "Bob" }, { $set: { age: 25 } })
db.users.updateMany({ status: "pending" }, { $set: { status: "active" } })sql
-- PostgreSQL
UPDATE users SET age = 25 WHERE name = 'Bob';
UPDATE users SET status = 'active' WHERE status = 'pending';Delete
删除
javascript
// MongoDB
db.users.deleteOne({ name: "Bob" })
db.users.deleteMany({ status: "deleted" })sql
-- PostgreSQL
DELETE FROM users WHERE name = 'Bob';
DELETE FROM users WHERE status = 'deleted';javascript
// MongoDB
db.users.deleteOne({ name: "Bob" })
db.users.deleteMany({ status: "deleted" })sql
-- PostgreSQL
DELETE FROM users WHERE name = 'Bob';
DELETE FROM users WHERE status = 'deleted';Indexing
索引
javascript
// MongoDB
db.users.createIndex({ email: 1 })
db.users.createIndex({ status: 1, createdAt: -1 })sql
-- PostgreSQL
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_status_created ON users(status, created_at DESC);javascript
// MongoDB
db.users.createIndex({ email: 1 })
db.users.createIndex({ status: 1, createdAt: -1 })sql
-- PostgreSQL
CREATE INDEX idx_users_email ON users(email);
CREATE INDEX idx_users_status_created ON users(status, created_at DESC);Reference Navigation
参考文档导航
MongoDB References
MongoDB 参考文档
- mongodb-crud.md - CRUD operations, query operators, atomic updates
- mongodb-aggregation.md - Aggregation pipeline, stages, operators, patterns
- mongodb-indexing.md - Index types, compound indexes, performance optimization
- mongodb-atlas.md - Atlas cloud setup, clusters, monitoring, search
- mongodb-crud.md - CRUD操作、查询运算符、原子更新
- mongodb-aggregation.md - 聚合管道、阶段、运算符、模式
- mongodb-indexing.md - 索引类型、复合索引、性能优化
- mongodb-atlas.md - Atlas云服务配置、集群、监控、搜索
PostgreSQL References
PostgreSQL 参考文档
- postgresql-queries.md - SELECT, JOINs, subqueries, CTEs, window functions
- postgresql-psql-cli.md - psql commands, meta-commands, scripting
- postgresql-performance.md - EXPLAIN, query optimization, vacuum, indexes
- postgresql-administration.md - User management, backups, replication, maintenance
- postgresql-queries.md - SELECT、关联查询、子查询、CTE、窗口函数
- postgresql-psql-cli.md - psql命令、元命令、脚本
- postgresql-performance.md - EXPLAIN、查询优化、VACUUM、索引
- postgresql-administration.md - 用户管理、备份、复制、维护
Python Utilities
Python 工具
Database utility scripts in :
scripts/- db_migrate.py - Generate and apply migrations for both databases
- db_backup.py - Backup and restore MongoDB and PostgreSQL
- db_performance_check.py - Analyze slow queries and recommend indexes
bash
undefinedscripts/- db_migrate.py - 为两种数据库生成并执行迁移
- db_backup.py - MongoDB与PostgreSQL的备份与恢复
- db_performance_check.py - 分析慢查询并推荐索引
bash
undefinedGenerate migration
生成迁移脚本
python scripts/db_migrate.py --db mongodb --generate "add_user_index"
python scripts/db_migrate.py --db mongodb --generate "add_user_index"
Run backup
执行备份
python scripts/db_backup.py --db postgres --output /backups/
python scripts/db_backup.py --db postgres --output /backups/
Check performance
检查性能
python scripts/db_performance_check.py --db mongodb --threshold 100ms
undefinedpython scripts/db_performance_check.py --db mongodb --threshold 100ms
undefinedKey Differences Summary
核心差异总结
| Feature | MongoDB | PostgreSQL |
|---|---|---|
| Data Model | Document (JSON/BSON) | Relational (Tables/Rows) |
| Schema | Flexible, dynamic | Strict, predefined |
| Query Language | MongoDB Query Language | SQL |
| Joins | $lookup (limited) | Native, optimized |
| Transactions | Multi-document (4.0+) | Native ACID |
| Scaling | Horizontal (sharding) | Vertical (primary), Horizontal (extensions) |
| Indexes | Single, compound, text, geo, etc | B-tree, hash, GiST, GIN, etc |
| 特性 | MongoDB | PostgreSQL |
|---|---|---|
| 数据模型 | 文档型(JSON/BSON) | 关系型(表/行) |
| 模式 | 灵活、动态 | 严格、预定义 |
| 查询语言 | MongoDB查询语言 | SQL |
| 关联查询 | $lookup(有限支持) | 原生、优化完善 |
| 事务 | 多文档事务(4.0+) | 原生ACID |
| 扩展方式 | 水平扩展(分片) | 垂直扩展(主节点)、水平扩展(扩展插件) |
| 索引 | 单字段、复合、文本、地理空间等 | B-tree、哈希、GiST、GIN等 |
Best Practices
最佳实践
MongoDB:
- Use embedded documents for 1-to-few relationships
- Reference documents for 1-to-many or many-to-many
- Index frequently queried fields
- Use aggregation pipeline for complex transformations
- Enable authentication and TLS in production
- Use Atlas for managed hosting
PostgreSQL:
- Normalize schema to 3NF, denormalize for performance
- Use foreign keys for referential integrity
- Index foreign keys and frequently filtered columns
- Use EXPLAIN ANALYZE to optimize queries
- Regular VACUUM and ANALYZE maintenance
- Connection pooling (pgBouncer) for web apps
MongoDB:
- 1对少关系使用嵌入式文档
- 1对多或多对多关系使用引用文档
- 为频繁查询的字段创建索引
- 使用聚合管道处理复杂转换
- 生产环境启用认证与TLS
- 使用Atlas托管服务
PostgreSQL:
- 模式规范化至3NF,为性能需求反规范化
- 使用外键保证引用完整性
- 为外键与频繁过滤的字段创建索引
- 使用EXPLAIN ANALYZE优化查询
- 定期执行VACUUM与ANALYZE维护
- Web应用使用连接池(pgBouncer)
Resources
资源
- MongoDB: https://www.mongodb.com/docs/
- PostgreSQL: https://www.postgresql.org/docs/
- MongoDB University: https://learn.mongodb.com/
- PostgreSQL Tutorial: https://www.postgresqltutorial.com/
- MongoDB: https://www.mongodb.com/docs/
- PostgreSQL: https://www.postgresql.org/docs/
- MongoDB University: https://learn.mongodb.com/
- PostgreSQL Tutorial: https://www.postgresqltutorial.com/