Linux环境下MongoDB的命令行操作是数据库管理的重要技能,涵盖了从基础连接到高级数据管理的多个维度,以下将详细介绍常用命令及其应用场景,帮助用户高效完成数据库操作。

基础连接与身份验证
在Linux终端中,使用mongo
或mongosh
(新版推荐)命令连接MongoDB服务,默认连接本地27017端口,可通过--host
和--port
参数指定远程服务器:
mongosh --host 192.168.1.100 --port 27017 -u admin -p password --authenticationDatabase admin
连接后需通过use databaseName
切换目标数据库,若数据库不存在则会在首次写入时自动创建,身份验证需确保用户已通过db.createUser()
提前创建,并具备相应权限。
数据库与集合管理
-
数据库操作
- 查看所有数据库:
show dbs
- 查看当前数据库:
db
- 创建/切换数据库:
use mydb
(若不存在则创建) - 删除数据库:
db.dropDatabase()
(需在目标数据库下执行)
- 查看所有数据库:
-
集合操作
(图片来源网络,侵删)- 创建集合:
db.createCollection('users')
- 查看集合:
show collections
- 删除集合:
db.users.drop()
- 创建集合:
文档的增删改查
插入文档(Insert)
- 单条插入:
db.users.insertOne({name: "Alice", age: 25, city: "Beijing"})
- 批量插入:
db.users.insertMany([{name: "Bob"}, {name: "Charlie", age: 30}])
注意:批量插入时若某条文档出错,默认会停止插入,可通过ordered: false
参数继续插入剩余文档。
查询文档(Query)
- 基础查询:
db.users.find()
(返回所有文档)
格式化输出:db.users.find().pretty()
- 条件查询:
db.users.find({age: {$gt: 25}})
(年龄大于25的用户)
常用操作符:$gt
(大于)、$lt
(小于)、$in
(包含)、$regex
(正则) - 投影查询:
db.users.find({city: "Shanghai"}, {name: 1, age: 1})
(仅返回name和age字段) - 分页查询:
db.users.find().skip(10).limit(5)
(跳过前10条,返回5条)
更新文档(Update)
- 单条更新:
db.users.updateOne({name: "Alice"}, {$set: {age: 26}})
- 批量更新:
db.users.updateMany({city: "Beijing"}, {$set: {status: "active"}})
- 删除字段:
db.users.updateMany({}, {$unset: {tempField: 1}})
删除文档(Delete)
- 单条删除:
db.users.deleteOne({name: "Bob"})
- 批量删除:
db.users.deleteMany({age: {$lt: 18}})
- 清空集合:
db.users.deleteMany({})
索引与性能优化
索引能显著提升查询效率,但会增加写入开销,常用操作包括:
- 创建索引:
db.users.createIndex({name: 1})
(1表示升序)
复合索引:db.users.createIndex({name: 1, age: -1})
- 查看索引:
db.users.getIndexes()
- 删除索引:
db.users.dropIndex("name_1")
聚合操作
聚合管道用于处理复杂数据分析,常用阶段包括:
db.users.aggregate([ {$match: {age: {$gte: 25}}}, // 筛选年龄≥25的用户 {$group: {_id: "$city", count: {$sum: 1}}}, // 按城市分组并计数 {$sort: {count: -1}} // 按计数降序排列 ])
常用操作符:$group
(分组)、$project
(重塑文档)、$unwind
(展开数组)、$lookup
(关联查询)。
数据备份与恢复
- 备份数据库:
mongodump --db mydb --out /backup/
- 恢复数据库:
mongorestore --db mydb /backup/mydb/
- 备份整个实例:
mongodump --host 192.168.1.100 --port 27017 --out /full_backup/
用户与权限管理
- 创建管理员用户:
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"}] })
常见问题排查
- 查看服务状态:
systemctl status mongod
- 查看日志:
tail -f /var/log/mongodb/mongod.log
- 连接问题:检查防火墙规则(
ufw status
)及端口占用(netstat -tuln | grep 27017
)
相关问答FAQs
Q1: 如何在Linux中查看MongoDB当前连接的IP地址?
A1: 使用db.runCommand({connPoolStats: 1})
命令可查看连接池信息,其中包含客户端IP地址,或通过netstat -tuln | grep 27017
查看监听端口,结合ss -tulnp | grep mongod
查看具体连接来源。

Q2: 执行MongoDB查询时出现"too much data for sort"错误,如何解决?
A2: 该错误通常因查询结果集过大且未使用索引导致排序超时,解决方案:① 为排序字段添加索引(如db.users.createIndex({name: 1})
);② 使用allowDiskUse: true
参数启用临时磁盘排序(db.users.find().sort({name: 1}).allowDiskUse(true)
);③ 优化查询条件减少返回数据量。