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));③ 优化查询条件减少返回数据量。
