mongo 常用命令

# mongo 常用命令

# 启动、关闭

1、命令启动

mongod --dbpath=/usr/local/mongodb/db --bind_ip=0.0.0.0

2、配置文件启动

可以将命令行参数写入配置文件,然后通过配置文件的方式启动 这里在修改 mongodb 目录下的 mongodb.conf ,文件内容如下:

port=27017
dbpath= /usr/local/mongodb/db             # 数据库文件存放目录(路径填写自己的)
logpath= /usr/local/mongodb/mongodb.log   # 日志文件(路径填写自己的)
logappend=true                            # 追加方式添加日志
fork=true                                 # 不在后台运行 true为后台运行
maxConns=100                              # 最大连接数
noauth=true                               # 不启用验证
journal=true                              # 每次写入时记录一条操作日志
storageEngine=wiredTiger                  # 存储引擎
bind_ip = 0.0.0.0                         # 允许所有id连接(允许外部访问)

配置说明

--dbpath 指定数据库的目录。 --port 指定数据库端口,模式是27017。 --bind_ip 绑定IP。 --derectoryperdb 为每个db创建一个独立子目录。 --logpath 指定日志存放目录。 --logappend 指定日志生成方式(追加/覆盖)。 --pidfilepath 指定进程文件路径,如果不指定,将不产生进程文件。 --keyFile 集群模式的关键标识 --journal 启用日志 --nssize 指定.ns文件的大小,单位MB,默认是16M,最大2GB。 --maxConns 最大的并发连接数。 --notablescan 不允许进行表扫描 --noprealloc 关闭数据文件的预分配功能 --fork 以后台Daemon形式运行服务

更多的选项利用 mongod --help 进行查看

然后,通过命令启动

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf

关闭数据库

/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/mongodb.conf --shutdown

# 连接数据库

# 连接本机
mongo       

# mongoDB 启动端口不为 27017时,mongo 命令需指定连接的端口
mongo --port 25015

# 连接远程服务
mongo ip   

# 使用特定账号密码连接验证指定数据库
mongo -u adminUser -p adminPassword --authenticationDatabase admin

# 数据库相关操作

# 查询所有数据库
show dbs
show databases

# 创建数据库
use dbName

# 删除数据库
db.dropDatabase()

# 表相关操作

# 查看所有表
show tables;

# 插入表数据
db.<tableName>.insert();
如:db.members.insert({name:"Michael",age:18,...});

# 查询表数据
db.<tableName>.find();
db.<tablename>.find("key":"value") 			# 返回所有符合的结果
db.<tablename>.findOne("key":"value")  	# 返回符合结果的第一个

# 修改表数据 如:
db.xx.update({name:"Michael"},{$set:{age:20}});

# 删除表中的数据 如:
db.xx.remove({name:"Michael"});

# 删除表全部数据:
db.xx.remove({});

# 删除表
db.xx.drop();

# 用户角色相关

# 查询当前数据库中的角色权限
db.runCommand({ "rolesInfo": "<rolename>" })

# 查询其它数据库中指定的角色权限
db.runCommand({ 'rolesInfo': { role: "<rolename>", db: "<database>" })

# 查询所有角色权限(仅用户自定义角色)
db.runCommand({ 'rolesInfo': 1 })

# 查询所有角色权限(包含内置角色)
db.runCommand({ 'rolesInfo': 1, showBuiltinRoles: true })

# 创建用户
db.createUser({user: "admin",pwd: "admin",roles: [{ role: "dbAdmin", db: "admin" }]})

# 修改用户
db.updateUser("user",{customData: { info: "xx" }, roles: [{ role: "root", db: "admin" }]})

# 修改用户密码
db.changeUserPassword("user", "new password")

# 删除用户
db.dropUser("user")

# 判断用户是否有访问权限
db.auth('username','pwd')

# 修改用户权限(修改roles数组)
db.updateUser("username",{ roles:[{ role:"readWriteAnyDatabase",db:"admin"}]})

# 创建管理员用户(具有所有数据库访问权限)
db.createUser({user:"adminUser",pwd:"adminPassword",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"dbAdminAnyDatabase",db:"admin"}]})

# 创建超级管理员用户(具有所有数据库操作访问权限)
db.createUser({user:'adminUser',pwd:'adminPassword',roles:[{role:'root',db:'admin'}]})

# MongoDB中的主要角色

  1. 数据库用户角色

    • read:允许用户读取指定数据库。
    • readWrite:允许用户读写指定数据库。
  2. 数据库管理角色

    • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除、查看统计或访问system.profile
    • dbOwner:这是dbAdminreadWrite角色的组合,以及具有dropDatabase权限的额外角色。即,dbOwner包含了readreadWritedbAdminuserAdmin的所有权限。
    • userAdmin:允许用户向system.users集合写入,可以在指定数据库中管理用户和角色。
  3. 集群管理角色

    • clusterAdmin:超级管理员角色,结合了readWriteAnyDatabasedbAdminAnyDatabaseuserAdminAnyDatabaseclusterManagerclusterMonitorhostManager角色。它还允许用户执行dropDatabase
    • clusterManager:允许用户在集群上管理和执行维护操作,如分片、复制集等。
    • clusterMonitor:允许用户监控集群的健康状态和性能。
    • hostManager:允许用户监控和管理MongoDB实例。
  4. 备份恢复角色

    • backup:允许用户从所有数据库备份数据。
    • restore:允许用户从备份中恢复数据到所有数据库。
  5. 所有数据库角色

    • readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限。
    • readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限。
    • userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限。
    • dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  6. 超级用户角色

    • root:只在admin数据库中可用,超级账号,具有超级权限。这通常包含了readWriteAnyDatabasedbAdminAnyDatabaseuserAdminAnyDatabaseclusterAdmin的所有权限。
  7. 内部角色

    • __system:MongoDB内部使用的角色,普通用户不应使用。

请注意,MongoDB中的角色和权限可以灵活组合和配置,以满足不同的安全和管理需求。在分配角色和权限时,请务必仔细考虑,并确保只授予必要的权限。

# 基本的和常用的MongoDB命令

# 1. 数据库操作

  • 查看所有数据库show dbsshow databases
  • 切换/创建数据库use 数据库名。如果数据库不存在,MongoDB会在插入数据时自动创建。
  • 删除当前数据库db.dropDatabase()

# 2. 集合操作

  • 查看当前数据库中的集合show collections
  • 删除集合db.集合名.drop()

# 3. 文档操作

  • 插入文档
    • 插入单个文档:db.集合名.insertOne({文档内容})
    • 插入多个文档:db.集合名.insertMany([多个文档])
  • 查询文档
    • 查询所有文档:db.集合名.find()
    • 查询并格式化输出(pretty打印):db.集合名.find().pretty()
    • 根据条件查询:db.集合名.find({字段名: 字段值})
  • 更新文档
    • 更新单个文档:db.集合名.updateOne({查询条件}, {$set: {更新内容}})
    • 更新多个文档:db.集合名.updateMany({查询条件}, {$set: {更新内容}})
  • 删除文档
    • 删除单个文档:db.集合名.deleteOne({查询条件})
    • 删除多个文档:db.集合名.deleteMany({查询条件})

# 4. 索引操作

  • 创建索引db.集合名.createIndex({字段名: 1}),其中1表示升序,-1表示降序。
  • 查看索引db.集合名.getIndexes()
  • 删除索引db.集合名.dropIndex("索引名")db.集合名.dropIndexes()(删除所有索引)。

# 5. 其他常用命令

  • 查看当前使用的数据库db
  • 查看数据库状态db.stats()
  • 获取帮助
    • help:查看所有帮助命令
    • db.help():查看数据库级别的帮助
    • db.集合名.help():查看集合级别的帮助
    • db.集合名.find().help():查看查询方法的帮助

# 注意事项

  • MongoDB中的集合(collection)相当于关系型数据库中的表(table)。
  • MongoDB的文档(document)是由键值对(key-value pairs)组成的,其中键是字符串,值可以是多种数据类型(如字符串、数字、数组、文档等)。
  • MongoDB的索引可以提高查询性能,但也会占用存储空间并可能降低写操作的性能,因此需要谨慎使用。