简介:本文以MongoDB初学者的视角,系统讲解MongoDB的安装部署、基础操作与核心特性,通过实际案例演示文档增删改查、索引优化与聚合查询,帮助开发者快速掌握非关系型数据库的核心技能。
MongoDB作为当前最流行的非关系型数据库(NoSQL),采用文档型数据模型(BSON格式),突破了传统关系型数据库的表结构限制。其核心优势体现在三方面:
典型应用场景包括:物联网设备数据采集、实时日志分析、用户行为追踪、内容管理系统等。某电商平台实践显示,使用MongoDB后订单处理效率提升40%,运维成本降低35%。
以Ubuntu 20.04系统为例,完整安装步骤如下:
# 导入MongoDB公钥wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -# 添加APT源echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -sc)/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list# 安装MongoDB社区版sudo apt-get updatesudo apt-get install -y mongodb-org# 启动服务sudo systemctl start mongodsudo systemctl enable mongod
/etc/mongod.conf配置文件包含关键参数:
推荐使用以下客户端工具:
// 创建/切换数据库(自动创建)use ecommerce// 显示所有数据库show dbs// 创建集合(隐式创建)db.createCollection("products")// 显示当前数据库集合show collections
插入文档:
db.products.insertOne({name: "无线耳机",price: 299.99,specs: {color: "白色",battery: "30小时"},stock: 150,tags: ["电子", "音频"]})
查询文档:
// 基础查询db.products.find({price: {$gt: 200}})// 逻辑组合查询db.products.find({$and: [{stock: {$lt: 200}},{tags: "电子"}]})// 投影查询(只返回特定字段)db.products.find({}, {name: 1, price: 1, _id: 0})
更新文档:
// 替换整个文档db.products.updateOne({name: "无线耳机"},{$set: {price: 279.99, stock: 120}})// 数组更新操作db.products.updateOne({name: "无线耳机"},{$push: {tags: "促销"}})
删除文档:
// 删除单个文档db.products.deleteOne({name: "无线耳机"})// 删除所有匹配文档db.products.deleteMany({stock: 0})
创建索引:
// 单字段索引db.products.createIndex({price: 1})// 复合索引db.products.createIndex({category: 1,price: -1})// 文本索引(用于全文搜索)db.products.createIndex({description: "text",name: "text"})
索引分析:
// 查看索引db.products.getIndexes()// 解释查询执行计划db.products.find({price: {$lt: 300}}).explain("executionStats")
db.orders.aggregate([{$match: {orderDate: {$gte: ISODate("2023-01-01")}}},{$group: {_id: "$customerId",totalAmount: {$sum: "$amount"},orderCount: {$sum: 1}}},{$sort: {totalAmount: -1}},{$limit: 10}])
MongoDB 4.0+支持多文档事务:
const session = db.getMongo().startSession()session.startTransaction()try {const orders = session.getDatabase("ecommerce").ordersconst inventory = session.getDatabase("ecommerce").inventoryorders.insertOne({productId: "p1001",quantity: 2,date: new Date()}, {session})inventory.updateOne({productId: "p1001"},{$inc: {stock: -2}},{session})session.commitTransaction()} catch (error) {session.abortTransaction()throw error} finally {session.endSession()}
数据建模策略:
_id字段提升写入性能查询优化技巧:
$where等计算操作$hint强制指定索引运维管理要点:
compact命令回收磁盘空间wiredTigerCacheSizeGB参数mongodump+云存储)Q1:连接失败如何排查?
bindIp配置/var/log/mongodb/mongod.logQ2:如何处理大文档?
failIndexKeyTooLong参数Q3:性能下降如何优化?
mongotop和mongostat监控slowms参数)通过本文的系统学习,开发者可以快速掌握MongoDB的核心操作,为后续的复杂应用开发奠定坚实基础。建议结合官方文档进行深入实践,逐步探索MongoDB在分布式系统、实时分析等领域的强大能力。