菜鸟科技网

Linux mongo命令有哪些常用操作?

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

Linux mongo命令有哪些常用操作?-图1
(图片来源网络,侵删)

基础连接与身份验证

在Linux终端中,使用mongomongosh(新版推荐)命令连接MongoDB服务,默认连接本地27017端口,可通过--host--port参数指定远程服务器:

mongosh --host 192.168.1.100 --port 27017 -u admin -p password --authenticationDatabase admin

连接后需通过use databaseName切换目标数据库,若数据库不存在则会在首次写入时自动创建,身份验证需确保用户已通过db.createUser()提前创建,并具备相应权限。

数据库与集合管理

  1. 数据库操作

    • 查看所有数据库:show dbs
    • 查看当前数据库:db
    • 创建/切换数据库:use mydb(若不存在则创建)
    • 删除数据库:db.dropDatabase()(需在目标数据库下执行)
  2. 集合操作

    Linux mongo命令有哪些常用操作?-图2
    (图片来源网络,侵删)
    • 创建集合: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查看具体连接来源。

Linux mongo命令有哪些常用操作?-图3
(图片来源网络,侵删)

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

分享:
扫描分享到社交APP
上一篇
下一篇