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中的主要角色
数据库用户角色:
read
:允许用户读取指定数据库。readWrite
:允许用户读写指定数据库。
数据库管理角色:
dbAdmin
:允许用户在指定数据库中执行管理函数,如索引创建、删除、查看统计或访问system.profile
。dbOwner
:这是dbAdmin
、readWrite
角色的组合,以及具有dropDatabase
权限的额外角色。即,dbOwner
包含了read
、readWrite
、dbAdmin
和userAdmin
的所有权限。userAdmin
:允许用户向system.users
集合写入,可以在指定数据库中管理用户和角色。
集群管理角色:
clusterAdmin
:超级管理员角色,结合了readWriteAnyDatabase
、dbAdminAnyDatabase
、userAdminAnyDatabase
、clusterManager
、clusterMonitor
和hostManager
角色。它还允许用户执行dropDatabase
。clusterManager
:允许用户在集群上管理和执行维护操作,如分片、复制集等。clusterMonitor
:允许用户监控集群的健康状态和性能。hostManager
:允许用户监控和管理MongoDB实例。
备份恢复角色:
backup
:允许用户从所有数据库备份数据。restore
:允许用户从备份中恢复数据到所有数据库。
所有数据库角色:
readAnyDatabase
:只在admin
数据库中可用,赋予用户所有数据库的读权限。readWriteAnyDatabase
:只在admin
数据库中可用,赋予用户所有数据库的读写权限。userAdminAnyDatabase
:只在admin
数据库中可用,赋予用户所有数据库的userAdmin
权限。dbAdminAnyDatabase
:只在admin
数据库中可用,赋予用户所有数据库的dbAdmin
权限。
超级用户角色:
root
:只在admin
数据库中可用,超级账号,具有超级权限。这通常包含了readWriteAnyDatabase
、dbAdminAnyDatabase
、userAdminAnyDatabase
和clusterAdmin
的所有权限。
内部角色:
__system
:MongoDB内部使用的角色,普通用户不应使用。
请注意,MongoDB中的角色和权限可以灵活组合和配置,以满足不同的安全和管理需求。在分配角色和权限时,请务必仔细考虑,并确保只授予必要的权限。
# 基本的和常用的MongoDB命令
# 1. 数据库操作
- 查看所有数据库:
show dbs
或show 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的索引可以提高查询性能,但也会占用存储空间并可能降低写操作的性能,因此需要谨慎使用。