MongoDB作为NoSQL数据库的代表,凭借灵活的数据模型和强大的扩展性,已成为后端开发的必备技能。本文将系统梳理MongoDB Shell的常用操作,涵盖数据库管理、文档操作、聚合分析、索引优化等核心场景,帮助开发者快速上手并高效应用。
一、环境搭建与基础命令
1. 连接数据库
# 本地默认连接
mongo
# 远程连接(含认证)
mongo 192.168.1.100:27017/admin -u root -p password
2. 数据库管理
// 查看所有数据库
show dbs
// 切换或创建数据库
use mydb
// 删除当前数据库
db.dropDatabase()
3. 集合操作
// 创建集合(自动创建无需显式声明)
db.createCollection("users")
// 查看集合
show collections
// 删除集合
db.users.drop()
二、文档的增删改查
1. 插入数据
// 插入单个文档
db.users.insertOne({
name:"Tom",
age:25,
email:"tom@example.com",
tags:["dev","mongodb"]
})
// 批量插入
db.users.insertMany([
{ name:"Jerry", age:30},
{ name:"Alice", age:22}
])
2. 查询数据
// 基础查询
db.users.find()
// 条件查询(精确匹配)
db.users.find({ name:"Tom"})
// 范围查询(年龄大于25)
db.users.find({ age:{ $gt:25}})
// 字段投影(仅显示name和email)
db.users.find({},{ name:1, email:1, _id:0})
// 正则匹配(名字以"A"开头)
db.users.find({ name:/^A/i })
3. 更新数据
// 更新单个文档
db.users.updateOne(
{ name:"Tom"},
{ $set:{ age:26}, $push:{ tags:"newbie"}}
)
// 更新多个文档
db.users.updateMany(
{ age:{ $lt:20}},
{ $set:{ status:"minor"}}
)
4. 删除数据
// 删除单个文档
db.users.deleteOne({ name:"Jerry"})
// 删除多个文档
db.users.deleteMany({ age:{ $lt:20}})
三、聚合分析与高级查询
1. 基础聚合统计
// 按状态分组统计数量
db.users.aggregate([
{ $group:{ _id:"$status", count:{ $sum:1}}}
])
2. 多阶段聚合(过滤+分组+排序)
// 统计活跃用户的平均年龄
db.users.aggregate([
{ $match:{ status:"active"}},
{ $group:{
_id:null,
avgAge:{ $avg:"$age"},
total:{ $sum:1}
}},
{ $sort:{ avgAge:-1}}
])
3. 数组展开($unwind)
// 分析标签分布
db.users.aggregate([
{ $unwind:"$tags"},
{ $group:{
_id:"$tags",
count:{ $sum:1}
}}
])
四、索引与性能优化
1. 创建索引
// 单字段升序索引
db.users.createIndex({ name:1})
// 复合索引(name升序,age降序)
db.users.createIndex({ name:1, age:-1})
// 唯一索引
db.users.createIndex({ email:1},{ unique:true})
2. 索引管理
// 查看所有索引
db.users.getIndexes()
// 删除索引
db.users.dropIndex("name_1")
五、事务处理(副本集环境)
// 启动事务
const session = db.getMongo().startSession();
session.startTransaction();
try{
// 转账操作示例
db.accounts.updateOne(
{ name:"Alice"},
{ $inc:{ balance:-500}},
{ session }
);
db.accounts.updateOne(
{ name:"Bob"},
{ $inc:{ balance:500}},
{ session }
);
session.commitTransaction();
}catch(error){
session.abortTransaction();
throw error;
}
六、备份与恢复
# 备份整个数据库
mongodump --host 127.0.0.1--port 27017--db mydb --out /backup/
# 恢复备份
mongorestore --host 127.0.0.1--port 27017/backup/mydb
七、权限管理
// 创建管理员账号
use admin
db.createUser({
user:"admin",
pwd:"password",
roles:[{ role:"userAdminAnyDatabase", db:"admin"}]
})
// 授予集合级权限
use mydb
db.createUser({
user:"readonly",
pwd:"123456",
roles:[{ role:"read", db:"mydb"}]
})
学习进阶:从操作到实战能力
MongoDB不仅是技术工具,更是构建高性能系统的基石。掌握Shell操作是第一步,但真正的挑战在于如何结合业务场景设计数据模型、优化查询性能,以及应对分布式架构的复杂性。
想系统提升MongoDB实战能力?
你的每一份支持,都是我们持续创作的动力!如果这篇文章对你有帮助,欢迎打赏一杯咖啡,让我们共同见证你的技术成长之旅!
领取专属 10元无门槛券
私享最新 技术干货