数据库
MongoDB/PostgreSQL 数据库设计、查询…
在 MongoDB 与 PostgreSQL 之间选型,并执行建库、CRUD/聚合查询、索引优化、迁移、备份恢复、性能分析与生产管理时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
MongoDB/PostgreSQL 数特定
解决思路
- 按数据模型选型:若需要 schema 灵活、文档/JSON/BSON 自然建模、水平分片、高写入吞吐、嵌套/层级数据、快速原型,则选 MongoDB;适用于内容管理、目录、IoT 时序、实时分析、移动应用、用户画像。
- 按一致性与查询选型:若需要强一致性/ACID、复杂多对多 JOIN、外键完整性、SQL/BI 工具链、严格 schema、窗口函数/CTE/分析负载,则选 PostgreSQL;适用于金融、电商交易、ERP、CRM、数仓、分析。
- 两者都支持 JSON/JSONB、全文检索、地理空间查询与索引、复制与高可用、ACID 事务(MongoDB 4.0+)、强安全特性,可在任一数据库中实现这些能力。
- MongoDB Atlas 快速开始:在 mongodb.com/atlas 注册,创建 M0 免费集群,获取连接串 mongodb+srv://user:pass@cluster.mongodb.net/db,用 mongosh 连接 mongodb+srv://cluster.mongodb.net/mydb。
- MongoDB 基础操作: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' })。
- PostgreSQL 安装与连接:Ubuntu/Debian 执行 sudo apt-get install postgresql postgresql-contrib;sudo systemctl start postgresql;psql -U postgres -d mydb。
- PostgreSQL 基础操作: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'。
- 插入操作:MongoDB 用 db.users.insertOne({ name: 'Bob', email: 'bob@example.com' }) 和 db.users.insertMany([{ name: 'Alice' }, { name: 'Charlie' }]);PostgreSQL 用 INSERT INTO users (name, email) VALUES ('Bob', 'bob@example.com'); 和 INSERT INTO users (name, email) VALUES ('Alice', NULL), ('Charlie', NULL);。
- 查询操作:MongoDB 用 db.users.find({ age: { $gte: 18 } }) 和 db.users.findOne({ email: 'bob@example.com' });PostgreSQL 用 SELECT * FROM users WHERE age >= 18; 和 SELECT * FROM users WHERE email = 'bob@example.com' LIMIT 1;。
- 更新操作:MongoDB 用 db.users.updateOne({ name: 'Bob' }, { $set: { age: 25 } }) 和 db.users.updateMany({ status: 'pending' }, { $set: { status: 'active' } });PostgreSQL 用 UPDATE users SET age = 25 WHERE name = 'Bob'; 和 UPDATE users SET status = 'active' WHERE status = 'pending';。
- 删除操作:MongoDB 用 db.users.deleteOne({ name: 'Bob' }) 和 db.users.deleteMany({ status: 'deleted' });PostgreSQL 用 DELETE FROM users WHERE name = 'Bob'; 和 DELETE FROM users WHERE status = 'deleted';。
- 索引操作:MongoDB 用 db.users.createIndex({ email: 1 }) 和 db.users.createIndex({ status: 1, createdAt: -1 });PostgreSQL 用 CREATE INDEX idx_users_email ON users(email); 和 CREATE INDEX idx_users_status_created ON users(status, created_at DESC);。
- 查阅 MongoDB CRUD 参考:references/mongodb-crud.md,覆盖 CRUD 操作、查询操作符、原子更新。
- 查阅 MongoDB 聚合参考:references/mongodb-aggregation.md,覆盖 aggregation pipeline、stages、operators、patterns。
- 查阅 MongoDB 索引参考:references/mongodb-indexing.md,覆盖索引类型、复合索引、性能优化。
- 查阅 MongoDB Atlas 参考:references/mongodb-atlas.md,覆盖 Atlas 云设置、集群、监控、搜索。
- 查阅 PostgreSQL 查询参考:references/postgresql-queries.md,覆盖 SELECT、JOIN、子查询、CTE、窗口函数。
- 查阅 PostgreSQL psql CLI 参考:references/postgresql-psql-cli.md,覆盖 psql 命令、meta-commands、脚本化。
- 查阅 PostgreSQL 性能参考:references/postgresql-performance.md,覆盖 EXPLAIN、查询优化、vacuum、索引。
- 查阅 PostgreSQL 管理参考:references/postgresql-administration.md,覆盖用户管理、备份、复制、维护。
- 使用 Python 工具 scripts/db_migrate.py 生成和应用两个数据库的迁移:python scripts/db_migrate.py --db mongodb --generate add_user_index。
- 使用 Python 工具 scripts/db_backup.py 备份和恢复 MongoDB 与 PostgreSQL:python scripts/db_backup.py --db postgres --output /backups/。
- 使用 Python 工具 scripts/db_performance_check.py 分析慢查询并推荐索引:python scripts/db_performance_check.py --db mongodb --threshold 100ms。
- 对比关键差异辅助选型:MongoDB 是文档模型 JSON/BSON、动态 schema、MongoDB Query Language、$lookup 有限 JOIN、多文档事务(4.0+)、水平分片、索引含单字段/复合/文本/地理等;PostgreSQL 是关系模型表/行、严格预定义 schema、SQL、原生优化 JOIN、原生 ACID、垂直扩展为主/可扩展水平、索引含 B-tree/hash/GiST/GIN 等。
- MongoDB 最佳实践:1-to-few 关系用内嵌文档;1-to-many 或 many-to-many 用引用文档;为频繁查询字段建索引;复杂转换用 aggregation pipeline;生产启用认证和 TLS;用 Atlas 做托管。
- PostgreSQL 最佳实践:schema 规范化到 3NF,为性能可反规范化;用外键保证引用完整性;为外键和频繁过滤列建索引;用 EXPLAIN ANALYZE 优化查询;定期 VACUUM 和 ANALYZE 维护;Web 应用用连接池(pgBouncer)。
- 查阅资源:MongoDB 文档 https://www.mongodb.com/docs/,PostgreSQL 文档 https://www.postgresql.org/docs/,MongoDB University https://learn.mongodb.com/,PostgreSQL Tutorial https://www.postgresqltutorial.com/。
适用边界 · 注意事项
- 需要强 ACID、复杂多表 JOIN、严格 schema、SQL/BI 工具链时,不要优先选 MongoDB 作为主库。
- 需要频繁变更 schema、天然 JSON/BSON、水平分片、高写入吞吐、嵌套文档时,不要强行用 PostgreSQL 关系模型。
- 环境未安装或不允许使用 MongoDB/PostgreSQL(以及 mongosh/psql/pgAdmin)时,本技能不适用。