简介:本文深入解析MongoDB基本使用方法,涵盖数据库连接、CRUD操作、索引优化及聚合框架,结合实战案例提升开发者数据库操作能力。
MongoDB的安装需根据操作系统选择对应版本(Windows/Linux/macOS),推荐使用官方包管理工具(如Homebrew、apt)或直接下载二进制包。安装完成后需验证服务状态:
# Linux系统验证服务sudo systemctl status mongod# 检查端口监听netstat -tulnp | grep 27017
配置文件(mongod.conf)需重点关注bindIp(允许访问的IP)和security.authorization(是否启用认证)。生产环境必须启用认证并配置强密码策略。
// 使用MongoDB Shell连接本地实例mongo --host 127.0.0.1 --port 27017// 带认证的连接mongo -u "adminUser" -p "password" --authenticationDatabase "admin"
const { MongoClient } = require('mongodb');const uri = "mongodb+srv://<username>:<password>@cluster0.mongodb.net/test";const client = new MongoClient(uri);async function connect() {try {await client.connect();const db = client.db("testDB");console.log("Connected to MongoDB");} finally {// 实际开发中应保持连接池await client.close();}}
连接池配置参数需注意maxPoolSize(默认100)和waitQueueTimeoutMS(默认120000ms),高并发场景需适当调大。
// 插入单条文档db.users.insertOne({name: "Alice",age: 28,tags: ["developer", "mongodb"],createdAt: new Date()});// 批量插入db.products.insertMany([{ name: "Laptop", price: 999 },{ name: "Phone", price: 699 }]);
// 基础查询db.users.find({ age: { $gt: 25 } });// 投影(只返回特定字段)db.users.find({}, { name: 1, _id: 0 });// 排序与分页db.products.find().sort({ price: -1 }).limit(10).skip(20);
// 替换整个文档db.users.replaceOne({ name: "Alice" }, {name: "Alice",age: 29,newField: "updated"});// 局部更新(推荐)db.users.updateOne({ name: "Alice" },{ $set: { age: 30 }, $inc: { loginCount: 1 } });// 数组操作db.users.updateOne({ name: "Alice" },{ $push: { tags: "database" } });
// 删除单个文档db.users.deleteOne({ name: "Alice" });// 删除所有匹配文档db.logs.deleteMany({ level: "debug" });
db.users.createIndex({ email: 1 }); // 1表示升序
db.orders.createIndex({customerId: 1,orderDate: -1});
// 文本索引(全文搜索)db.articles.createIndex({ content: "text" });// TTL索引(自动过期)db.sessions.createIndex({ expiresAt: 1 }, { expireAfterSeconds: 3600 });
db.users.find({ age: { $gt: 25 } }).explain("executionStats");
关键指标解读:
executionTimeMillis:查询耗时totalDocsExamined:扫描的文档数totalKeysExamined:扫描的索引键数db.collection.stats()监控索引使用情况
db.orders.aggregate([{ $match: { status: "completed" } },{ $group: {_id: "$customerId",total: { $sum: "$amount" },count: { $sum: 1 }}},{ $sort: { total: -1 } },{ $limit: 5 }]);
db.sales.aggregate([{ $project: {date: { $dateToString: { format: "%Y-%m", date: "$saleDate" } },amount: 1}},{ $group: {_id: "$date",total: { $sum: "$amount" },avg: { $avg: "$amount" }}},{ $sort: { _id: 1 } }]);
db.blogPosts.aggregate([{ $unwind: "$tags" },{ $group: {_id: "$tags",count: { $sum: 1 }}},{ $sort: { count: -1 } }]);
insertMany()替代单条插入w: 0(默认w:1)$set避免文档移动explain()验证)$hint强制指定索引(调试时使用)| 场景 | 内存建议 | 存储类型 |
|---|---|---|
| 开发环境 | 4GB+ | SSD |
| 生产环境 | 16GB+(数据节点) | NVMe SSD |
| 高并发写入 | 32GB+ | RAID10 SSD阵列 |
// 修改连接字符串增加超时参数mongodb://host:27017/?connectTimeoutMS=30000&socketTimeoutMS=30000
解决方案:
wiredTigerCacheSizeGB配置(默认50%物理内存)常见原因:
通过系统掌握上述MongoDB核心操作和优化策略,开发者能够更高效地完成数据库设计、查询优化和性能调优工作。建议结合实际业务场景进行针对性练习,并通过慢查询日志(db.setProfilingLevel(1))持续监控系统性能。